2017-03-20 198 views
1

當我試圖使用我在Ruby on Rails中爲Post模型創建的工廠時,基本上出現錯誤。FactoryGirl undefined method`create ='

以下是完整的錯誤:

Failure/Error: post = create(:post) 

NoMethodError: 
    undefined method `create=' for #<Post:0x007fbf1be6e510> 
    Did you mean? created_at= 
# ./spec/models/post_spec.rb:6:in `block (2 levels) in <top (required)>' 

下面是工廠的文件:

spec/factories/post.rb

FactoryGirl.define do 
    factory :post do 
     title "Hello" 
     content "Hello, my name is Jacob." 
     user create(:user) 
     user_id 1 
    end 
end 

spec/models/post_spec.rb

require 'rails_helper' 
require 'spec_helper' 

describe Post do 
    it "has a valid factory" do 
     post = create(:post) 
     expect(post).to(be_valid) 
    end 
end 

我確實有一個spec/support/factory_girl.rb文件,其中包含FactoryGirl :: Syntax :: Methods。該文件由spec/rails_helper.rb加載。

此外,創建(:用戶)線的工作原理,我能夠在軌道控制檯,但不是後工廠使用用戶工廠。

任何幫助將是太棒了。謝謝!

+1

有幾條評論......您的'rails_helper.rb'是否已經不需要'spec_helper'?另外,代替'post = create(:post)',通常在'it'語句之外使用'let(:post){create:post}',特別是如果您要對該帖子執行很多測試目的。 – Jon

+0

你說得對。它已經需要'spec_helper'。並感謝您的提示! – JGrishey

回答

1

在您的post工廠中,您定義關聯記錄的語法錯誤。嘗試將其定義是這樣的:

FactoryGirl.define do 
    factory :post do 
    title "Hello" 
    content "Hello, my name is Jacob." 
    user 
    end 
end 

你只需要聲明的是,postuser,你當然不應該設置他們都具有特定的user_id ...因爲每個職位將創建一個新的除非另有說明,否則用戶不知道什麼user_id將生成。

相關問題