FactoryGirl未定义方法`create ='

时间:2017-03-20 21:53:34

标签: ruby-on-rails rspec

当我尝试使用我在Ruby on Rails中为Post模型创建的工厂时,我基本上遇到了错误。

这里有完整的错误:

 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加载。

此外,create(:user)行可以使用,我可以在rails控制台中使用用户工厂,但不能使用post factory。

任何帮助都会很棒。谢谢!

1 个答案:

答案 0 :(得分:2)

post工厂中,您的语法错误,无法定义关联记录。尝试像这样定义:

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

您只需声明post有一个user,并且您当然不应该将它们全部设置为具有特定user_id ...因为每个帖子除非另有说明,否则您将创建新用户,并且您不知道将生成user_id