2012-05-02 44 views
27

Tôi đang theo hướng dẫn của Michal Hartls Rails Chương 7. Tôi đã cài đặt gem Girl Factory. Tôi cứ bị lỗi này khi tôi chạy thử nghiệm của tôiNhà máy không được đăng ký: người dùng

Failures: 

1) UsersController GET 'show' should be successful 
    Failure/Error: @user = FactoryGirl.create(:user) 
    ArgumentError: 
     Factory not registered: user 
    # ./spec/controllers/users_controller_spec.rb:10:in `block (3 levels) in <top (required)>' 

Finished in 0.66336 seconds 42 examples, 1 failure 

Failed examples: 

rspec ./spec/controllers/users_controller_spec.rb:14 # UsersController GET 'show' should be successful 

Gemfile

group :test do 
    gem 'autotest', '4.4.6' 
    gem "autotest-growl", "~> 0.2.16" 
    gem "autotest-rails", "~> 4.1.2" 
    gem "rspec", "~> 2.9.0" 
    gem 'rspec-rails', '2.9.0' 
    gem 'webrat', '0.7.3' 
    gem "spork", '0.9.0' 
    gem 'annotate', '~> 2.4.1.beta' 
    gem "factory_girl", "~> 3.2.0" 
end 
# See https://github.com/sstephenson/execjs#readme for more supported runtimes 
gem 'therubyracer', :platform => 

user_controller_spec.rb tôi là

require 'spec_helper' 

describe UsersController do 

    render_views 

    describe "GET 'show'" do 
    before(:each) do 
    @user = FactoryGirl.create(:user) 
    end 

    it "should be successful" do 
     get :show, :id => @user 
     response.should be_success 
    end 
    end 

    describe "GET 'new'" do 
    it "should be successful" do 
     get :new 
     response.should be_success 
    end 

    it "should have the right title" do 
     get :new 
     response.should have_selector('title', :content => "Sign up") 
    end 
    end 
end 

factories.rb tôi là

FactoryGirl.create :user do |user| 
    user.name     "Mark Brown" 
    user.email     "[email protected]" 
    user.password    "foobar" 
    user.password_confirmation "foobar" 
end 

tôi đã thay đổi

Factory(:name) 

để

FactoryGirl.create(:user) 

trên dòng 10 trong user_controller_spec.rb bởi vì tôi đã nhận được một cảnh báo deprication tôi. Tôi nghĩ rằng sẽ sửa chữa nó nhưng bây giờ im chỉ nhận được.

Factory not registered: user 

Ai đó có thể cho tôi biết điều gì đang diễn ra?

Trả lời

6

điều gì sẽ xảy ra nếu bạn xác định nhà máy trước, chứ không phải tạo nhà máy? thử điều này:

FactoryGirl.define do 
    factory :user do 
    name     "Mark Brown" 
    email     "[email protected]" 
    password    "foobar" 
    password_confirmation "foobar" 
    end 
end 
+0

Điều này phù hợp với tôi. Cảm ơn! –

3

Bạn sẽ cần viên ngọc 'factory_girl_rails' dưới nhóm thử nghiệm

+0

Làm việc cho tôi. Tôi vô tình sử dụng gem 'factory_girl' thay vì 'factory_girl_rails' –

41

Tôi đã có những lỗi tương tự khi tôi lần đầu tiên sử dụng FactoryGirl trong Chương đó và tất cả những gì cần làm là khởi động lại máy chủ và Spork nếu bạn đang sử dụng nó. Hy vọng nó sẽ giúp

+3

Đặt lại 'spork' đã giúp tôi, thx! – Martin

+3

Tương tự ở đây, khởi động lại cả hai máy chủ đường ray và bảo vệ/spork và sau đó các bài kiểm tra vượt qua. Đó là một chút khó chịu. – Raj

+0

Cùng một vấn đề và khắc phục cho người dùng zeus. – Pistos

52

Tôi đã sửa nó.

Giải pháp là thay đổi gem 'factory_girl' thành gem 'factory_girl_rails' trong Gemfile của tôi.

+0

Cảm ơn. Điều này giải quyết các vấn đề đối với tôi. –

+0

Điều này đã khắc phục được sự cố cho tôi - cảm ơn –

+0

Rực rỡ. Cảm ơn bạn! – creativetim

1

Trong Gemfile của bạn, bạn nên thay thế với điều này

gem "factory_girl_rails", "~> 4.0" 

thay vì

gem "factory_girl", "~> 3.2.0" 
0

Tôi đã sử dụng nâng lên như IRB của tôi. Khi tôi gỡ bỏ nó từ đá quý của tôi, tôi đã có thể nhận được Factory cô gái để làm việc đúng cách sử dụng.

rails c -e test 

irb -> FactoryGirl.create(:user) 

Có thể ai đó có thể giải thích cách làm việc này bằng cách sử dụng nâng lên.

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