2014-05-25 11 views
5

Tôi đang cố gắng để chạy rspec với FactoryGirl, nhưng tôi tiếp tục nhận được lỗi này:ArgumentError: Nhà máy không đăng ký

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)>' 

-

Dưới đây là các thử nghiệm với các lỗi (spec/yêu cầu/products_spec.rb):

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

-

Dưới đây là nhà máy (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 

-

tôi khởi động lại máy chủ (với Spork và Guard) và có gì thay đổi, mặc dù tôi có thể không được khởi động lại Spork/Bảo vệ chính xác.

-

tôi làm có require 'factory_girl' trong spec của tôi/spec_helper.rb.

-

Dưới đây là tôi Gemfile. Lưu ý rằng Tôi đang sử dụng "factory_girl_rails" trong Gemfile tôi:

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 

-

Bạn có thể tìm ra lỗi?

+0

Có thể thêm 'config.include FactoryGirl :: Cú pháp :: Phương thức' vào khối' RSpec.configure'. Nhưng nó sẽ làm việc mà không có điều đó nói chung. – zishe

+0

Cũng không có nhu cầu về spork vì 'spring' xuất hiện, nó thay thế hoàn toàn. – zishe

+1

bạn đã thử tạo nhà máy như ** spec/factories/products.rb ** – robzdc

Trả lời

10

Tôi đã ném một loạt các thứ ở đây, vì vậy thật khó để biết chính xác sửa chữa là gì. Một điều tôi đã làm là chuyển đổi require 'factory_girl' trong spec_helper.rb thành require 'factory_girl_rails' và điều đó có vẻ là giải pháp hợp lý nhất.

Ngoài ra, tôi đã thêm config.include FactoryGirl::Syntax::Methods vào khối Rspec.configure của spec_helper.rb và tôi nghĩ điều đó cũng rất quan trọng.

+6

Tôi đã gặp lỗi tương tự. Trong trường hợp của tôi, vấn đề là tôi đang sử dụng 'factory_girl'. Đá quý thích hợp để sử dụng với Rails là 'factory_girl_rails' (ví dụ: 'gem' factory_girl_rails ',' ~> 4.5.0 ', nhóm: [: development,: test]' trong Gemfile của bạn.rb). Thêm 'config.include FactoryGirl :: Cú pháp :: Phương thức' vào khối' RSpec.configure' có thể không có gì liên quan đến vấn đề của bạn đang được giải quyết: mục đích của dòng này là cho phép tạo một đối tượng mà không cần để tham chiếu 'FactoryGirl' (tức là' create (: product) 'thay vì' FactoryGirl.create (: product) ') –

0

"ArgumentError: Nhà máy không được đăng ký" cũng được tạo nếu định nghĩa nhà máy của bạn bị đặt tên sai. Định nghĩa nhà máy của bạn có thể được gọi là phases.rb, nhưng định nghĩa nên đọc: factory :phase do (số ít).

Các vấn đề liên quan