2012-12-01 54 views
0

當我運行我的測試時,出現以下錯誤消息。它說這個問題出現在我的lecture_spec中,而頂部是必需的。我不知道這是否與要求我的spec_helper.rb文件有關。factorygirl rails,在我的規範中說「top required」 - 不知道如何修復

1) Lecture has a valid factory 
    Failure/Error: FactoryGirl.create(:lecture).should be_valid 
    NoMethodError: 
     undefined method `after_build=' for #<Lecture:0x007fe7747bce70> 
    # ./spec/models/lecture_spec.rb:21:in `block (2 levels) in <top (required)>' 

我廠如下所示:

require 'faker' 

FactoryGirl.define do 
    factory :question do  
    association :lecture   
    name { Faker::Lorem.words(1) } 

    description {Faker::Lorem.words(7)} 

    factory :question_one do 
     answer 1 
    end 

    factory :question_two do 
     answer 2 
    end 

    factory :question_three do 
     answer 3 
    end 
    end 
end 

這是我lecture_spec文件

require 'spec_helper' 

describe Lecture do  
    it "has a valid factory" do 
    FactoryGirl.create(:lecture).should be_valid  
    end 
end 

,這是我演講的工廠,在那裏我定義的講座工廠。

FactoryGirl.define do 
    factory :lecture do 
     #association :question 
     name  {Faker::Lorem.words(1)} 
     description {Faker::Lorem.words(7)} 
     soundfile_file_name {Faker::Lorem.words(1)} 
     soundfile_content_type {Faker::Lorem.words(3)} 
     soundfile_file_size  {Faker::Lorem.words(8)} 

     after_build do |question| 
      [:question_one, :question_two, :question_three].each do |question| 
       association :questions, factory: :question, strategy: :build 
      end 
     end 
    end 
end 

回答

0

我相信問題是您沒有定義演講的工廠。它試圖建立一個講座,但你還沒有定義工廠。

添加工廠講座應該可以解決問題。在工廠文件夾下的自己的lectures.rb文件中執行此操作。

你可以做以下

FactoryGirl.define do 
    factory :lecture do 
    #some attributes here 
    end 
end 

應該解決您的問題。

+0

不幸的是,我已經定義了演講工廠。我在上面的代碼中添加了。 – user924088

0

FactoryGirl使用的after方法有生命週期掛鉤參數指定的回調,因此您的代碼應閱讀:

after(:build) do |question| 
    [:question_one, :question_two, :question_three].each do |question| 
     association :questions, factory: :question, strategy: :build 
    end 
end 

更多信息請參見the Callbacks section in the readme

相關問題