RSpec结果和Rails控制台的行为不同

时间:2012-06-06 19:54:43

标签: ruby-on-rails rspec rails-console

这是我的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对象已成功创建且具有正确的序列。有什么想法吗?

3 个答案:

答案 0 :(得分:0)

据我所知,

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

答案 1 :(得分:0)

您在Lesson上获得的任何验证都可以在调用回调之前以静默方式中止创建。将其更改为规范中的create!以进行检查。

答案 2 :(得分:0)

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

来更改FactoryGirl的行为
initialize_with { new(attributes) }

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