2012-05-02 31 views
27

私はMichal Hartls Railsチュートリアルに従っています。第7章:私はFactory Girlの宝石をインストールしました。私が実行したとき、私は私のテスト工場未登録:ユーザー

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マイfactories.rbが

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

Iである

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 

です変更されました

012私はdeprication警告なっていた私の user_controller_spec.rb becuaseでライン10上の

FactoryGirl.create(:user) 

から

Factory(:name) 

。私はそれを修正すると思ったが、今はちょうど取得しています。

Factory not registered: user 

何が起こっているか教えていただけますか?

答えて

6

工場を最初に定義して作成しないとどうなりますか? これを試してみてください。

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

これは私のために働いた。ありがとう! –

3

あなたは、私が最初にその章でFactoryGirlを使用し、私が行うために必要なすべてが再起動したとき、私は同じエラーを持っていたテストグループ

+0

私のために働いた。私は誤って 'factory_girl_rails'の代わりに 'factory_girl'という宝石を使用しました –

41

の下で宝石「factory_girl_rails」を必要になりますサーバーとSporkを使用している場合は、欲しいのですが。

+3

'spork'をリセットすることで、私の助けになりました! – Martin

+3

同じですが、両方のレールサーバとガード/スポークを再起動し、テストに合格します。それはちょっと面倒です。 – Raj

+0

zeusのユーザーには同じ問題と修正があります。 – Pistos

52

私はすでにそれを修正しました。

解決策は、私のGemfileでgem 'factory_girl'gem 'factory_girl_rails'に変更することでした。あなたのGemfileに

+0

ありがとうございます。これは私の問題を解決しました。 –

+0

これは私にとっても問題を解決しました - ありがとう –

+0

ブリリアント。ありがとうございました! – creativetim

1

あなたの代わりに、私は私のIRBとしてプライを使用していた

gem "factory_girl", "~> 3.2.0" 
0

のこの

gem "factory_girl_rails", "~> 4.0" 

で置き換える必要があります。 私はそれを私の宝石から取り除くと、工場の女の子が正しく働くようになった。

rails c -e test 

irb -> FactoryGirl.create(:user) 

多分誰かがこの作業をどのようにして行うか説明することができます。

関連する問題