【发布时间】:2012-01-31 23:03:34
【问题描述】:
我很确定我在这里遗漏了一些非常基本的东西。
我想测试 before_save 回调是否做了它应该做的事情,而不仅仅是它被调用。
我写了以下测试:
it 'should add lecture to question_type' do
@course = Factory :course,
:start_time => Time.now - 1.hour,
:end_time => Time.now
@question = Factory.create(:question,
:course_id => @course.id,
:created_at => Time.now - 10.minutes)
@question.question_type.should == 'lecture'
end
我有course 和question 的以下工厂:
Factory.define :course do |c|
c.dept_code {"HIST"}
c.course_code { Factory.next(:course_code) }
c.start_time { Time.now - 1.hour }
c.end_time { Time.now }
c.lecture_days { ["Monday", Time.now.strftime('%A'), "Friday"] }
end
Factory.define :question do |q|
q.content {"Why don't I understand this class!?"}
q.association :course
end
我在Question 模型中编写了以下回调:
before_save :add_type_to_question
protected
def add_type_to_question
@course = Course.find(self.course_id)
now = Time.now
if (time_now > lecture_start_time && time_now < lecture_end_time ) && @course.lecture_days.map{|d| d.to_i}.include?(Time.now.wday)
self.question_type = "lecture"
end
end
测试一直失败,提示 question_type 的“got: nil”而不是“lecture”
由于我没有看到我的实现代码有任何明显错误,我在我的开发环境中尝试了回调,它实际上可以在 question_type 中添加“讲座”。
这让我觉得我的测试可能有问题。我在这里想念什么? Factory.create是否默认跳过回调?
【问题讨论】:
-
代替 before_save 尝试 before_validation
标签: ruby-on-rails-3 rspec2 factory-bot