ArgumentError:工厂未注册

pet*_*ord 9 ruby rspec ruby-on-rails factory-bot

我正在尝试使用FactoryGirl运行rspec,但我一直收到此错误:

1) Products Update with invalid information
     Failure/Error: let(:product) { FactoryGirl.create(:product) }
     ArgumentError:
       Factory not registered: product
     # ./spec/requests/products_spec.rb:47:in `block (3 levels) in <top (required)>'
     # ./spec/requests/products_spec.rb:52:in `block (3 levels) in <top (required)>'
Run Code Online (Sandbox Code Playgroud)

-

这是带错误的测试(spec/requests/products_spec.rb):

describe "Read" do
    let(:product) { FactoryGirl.create(:product) }
    before { visit product_path(product) }
    it { should have_text(product.title) }
end
Run Code Online (Sandbox Code Playgroud)

-

这是工厂(spec/factories.rb):

FactoryGirl.define do
    factory :product do
        title "Lorem ipsum"
        description "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce vitae ipsum consectetur, semper dolor sed, dignissim enim."
        image_url "lorem.png"
        price 9.95
    end
end
Run Code Online (Sandbox Code Playgroud)

-

重新启动了服务器(使用Spork和Guard)并且没有任何改变,但我可能没有正确地重新启动Spork/Guard.

-

确实有需要我的规格/ spec_helper.rb"factory_girl".

-

这是我的Gemfile.请注意,在我的Gemfile中使用" factory_girl_rails":

source 'https://rubygems.org'

gem 'rails', '4.1.1'
gem 'sass-rails', '~> 4.0.3'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.0.0'
gem 'jquery-rails'
gem 'turbolinks'
gem 'jbuilder', '~> 2.0'
# gem 'bcrypt', '~> 3.1.7'

group :development do
    gem 'spring'
  gem 'sqlite3', '1.3.8'
  gem 'minitest'
  gem 'rspec-rails', '2.13.1'
  gem 'guard-rspec', '2.5.0'
  gem 'spork-rails', '4.0.0'
  gem 'guard-spork', '1.5.0'
end

group :test do
    gem 'selenium-webdriver', '2.35.1'
  gem 'capybara', '2.1.0'
  gem 'growl', '1.0.3'
  gem 'factory_girl_rails', '4.2.1'
end

group :production do
  gem 'pg', '0.15.1'
  gem 'rails_12factor', '0.0.2'
end

group :doc do
  gem 'sdoc', '0.4.0', require: false
end
Run Code Online (Sandbox Code Playgroud)

-

你能找到错误吗?

pet*_*ord 15

我在这里扔了很多东西,所以很难说清楚究竟是什么.我做的一件事是将require 'factory_girl'spec_helper.rb 切换到require 'factory_girl_rails',这似乎是最合理的解决方案.

另外,我添加config.include FactoryGirl::Syntax::MethodsRspec.configurespec_helper.rb 的块中,我认为这也很重要.

  • 我有同样的错误.在我的情况下,问题是我在使用`factory_girl`.与Rails一起使用的正确的gem是`factory_girl_rails`(例如`gem'stage_girl_rails','〜> 4.5.0',group:[:development,:test]`在你的Gemfile.rb中).将`config.include FactoryGirl :: Syntax :: Methods`添加到`RSpec.configure`块可能与你正在解决的问题无关:这一行的目的是允许一个人创建一个对象而不需要引用` FactoryGirl`(即`create(:product)`而不是`FactoryGirl.create(:product)`) (8认同)