【问题标题】:RSpec results and Rails Console behaving differentlyRSpec 结果和 Rails 控制台行为不同
【发布时间】:2012-06-10 21:10:30
【问题描述】:

这是我的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

但是,当通过rails console 进行 T 测试时,Lesson 对象已成功创建并具有正确的顺序。任何想法为什么?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我检查了没有验证错误。确实创建了课程对象,但未设置序列属性。
      • 你确定 set_sequence 被调用了吗?
      【解决方案3】:

      FactoryGirl先初始化不带参数的object,然后一个一个地赋值。在这种情况下,您的模型中的回调可能不起作用。所以你可以尝试通过添加来改变FactoryGirl的行为

      initialize_with { new(attributes) }
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-26
        • 1970-01-01
        • 2019-03-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多