2012-06-06 36 views
0

这里是我的Lesson型号:RSpec的结果和Rails控制台行为不同

before_create :set_sequence 

def set_sequence 
    maxseq = Lesson.where(:course_id => self.course_id).maximum("sequence") 
    if (maxseq.nil?) 
    maxseq = 0 
    end 
    self.sequence = maxseq + 1 
end 

当我运行rspec以下测试失败:

it "validate sequence is setup" do 
    lesson = Lesson.create(:title => "Testing", :description => "Testing", :course_id => 1) 
    lesson.sequence.should_not eql nil 
end 

然而当T通过rails consoleLesson对象是测试这个成功创建并具有正确的顺序。任何想法为什么?据我所知,

回答

0

lesson.sequence.should_not be_nil是测试零的正确方法。你尝试过吗?

+0

没有工作。 –

0

你已经得到的任何验证在你的回调被调用之前,教训可能会默默地中止创建。在规范中将其更改为create!以检查它。

+0

我检查了没有验证错误。 Lesson对象确实被创建,但不知怎的,sequence属性没有被设置。 –

+0

你确定知道set_sequence正在被调用吗? – regularfry

0

FactoryGirl首先初始化没有参数的对象,然后逐个分配参数。在这种情况下,模型中的回调可能不起作用。所以,你可以尝试“通过添加

initialize_with { new(attributes) } 

Lesson行为的工厂改变FactoryGirl。虽然我不确定它会有帮助。在Rails中测试回调行为非常棘手。

相关问题