0

这是我的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 consoleLesson对象已成功创建并具有正确的顺序。任何想法为什么?

4

3 回答 3

0

您在课程中获得的任何验证都可能会在您的回调被调用之前静默中止创建。将其更改为create!在规范中进行检查。

于 2012-06-06T20:13:24.370 回答
0

lesson.sequence.should_not be_nil据我所知,是测试零的正确方法。你试过吗?

于 2012-06-06T20:05:38.760 回答
0

FactoryGirl首先初始化没有参数的对象,然后一个一个地分配参数。在这种情况下,您的模型中的回调可能不起作用。因此,您可以尝试FactoryGirl通过添加来改变行为

initialize_with { new(attributes) }

Lesson's 的工厂。我不确定它是否会有所帮助。在 Rails 中测试回调行为很棘手。

于 2013-03-21T05:01:29.537 回答