Ruby on rails 3.1 当我进行测试时,无法在创建后找到
我正在使用此工厂为我的测试创建测验:Ruby on rails 3.1 当我进行测试时,无法在创建后找到,ruby-on-rails-3.1,ruby-on-rails-3.2,rspec2,factory-bot,Ruby On Rails 3.1,Ruby On Rails 3.2,Rspec2,Factory Bot,我正在使用此工厂为我的测试创建测验: factory :quiz_with_two_choices_first_correct, :class => Quiz do |i| quiz_type Quiz.SINGLE_ANSWER_CHOICE weight 1 i.after_create do |quiz| quiz.quiz_choices = [FactoryGirl.create(:quiz_choice, :body=>'Quiz
factory :quiz_with_two_choices_first_correct, :class => Quiz do |i|
quiz_type Quiz.SINGLE_ANSWER_CHOICE
weight 1
i.after_create do |quiz|
quiz.quiz_choices = [FactoryGirl.create(:quiz_choice, :body=>'Quiz Choice 1', :is_correct=>true, :position=>1),
FactoryGirl.create(:quiz_choice, :body=>'Quiz Choice 2', :is_correct=>false, :position=>2)]
end
end
在我的测验模型中,我有:
after_create { |record|
if !current_unit.nil? then
if current_unit_type.eql? FinalExam.to_s then
current_unit.total_weights=
current_unit.total_weights+ record.weight
current_unit.save
end
end
}
但当我尝试测试时,我会出现以下错误:
Failure/Error: quiz= FactoryGirl.create(:quiz_with_two_choices)
NoMethodError:
undefined method `after_create=' for #<Quiz:0xb50075c>
那么,有什么问题吗?问题在于您在工厂内分配了一个创建后块:
i.after_create do |quiz|
quiz.quiz_choices = [FactoryGirl.create(:quiz_choice, :body=>'Quiz Choice 1', :is_correct=>true, :position=>1),
FactoryGirl.create(:quiz_choice, :body=>'Quiz Choice 2', :is_correct=>false, :position=>2)]
end
这将尝试运行quick.after\u create=
,显然对于quick实例没有这样的方法
作为一种解决方案,您可以尝试使用以下对factory girl有效的语法:
after(:create) do |quiz|
# Do your quiz stuff here
end
after(:create) do |quiz|
# Do your quiz stuff here
end