这是我的Lesson
模型:
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 console
测试时,Lesson
对象已成功创建且具有正确的序列。有什么想法吗?
答案 0 :(得分:0)
lesson.sequence.should_not be_nil
是测试nil的正确方法。你试过了吗?
答案 1 :(得分:0)
您在Lesson上获得的任何验证都可以在调用回调之前以静默方式中止创建。将其更改为规范中的create!
以进行检查。
答案 2 :(得分:0)
FactoryGirl
首先初始化没有参数的对象,然后逐个分配参数。在这种情况下,模型中的回调可能不起作用。因此,您可以尝试通过添加
FactoryGirl
的行为
initialize_with { new(attributes) }
到Lesson
的工厂。我不确定它会有所帮助。在Rails中测试回调行为很棘手。