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