2010-10-21 69 views
7

我試圖跟隨railstutorial.org,和我目前的第7章,在那裏你開始使用工廠:http://railstutorial.org/chapters/modeling-and-viewing-users-two#sec:tests_with_factoriesrailstutorial.org - 未定義的方法'廠」

我用Rails 3.0.1和Ruby -1.9.2-P0

我不能爲我的生活讓我的RSpec的測試雖然通過,我得到的錯誤是

Failures: 
    1) UsersController GET 'show' should be successful 
    Failure/Error: @user = Factory(:user) 
    undefined method `Factory' for #<RSpec::Core::ExampleGroup::Nested_2::Nested_1:0x00000101cc5608> 
# ./spec/controllers/users_controller_spec.rb:9:in `block (3 levels) in <top (required)>' 

我factories.rb看起來是這樣的:

# By using the symbol ':user', we get Factory Girl to simulate the User model. 
Factory.define :user do |user| 
    user.name     "Michael Hartl" 
    user.email     "[email protected]" 
    user.password    "foobar" 
    user.password_confirmation "foobar" 
end 

,這是我users_controller_spec.rb文件:

require 'spec_helper' 

describe UsersController do 
    render_views 

    describe "GET 'show'" do 
    before(:each) do 
     @user = Factory(:user) 
    end 
    it "should be successful" do 
     get :show, :id => @user 
     response.should be_success 
    end 

這裏是我的Gemfile,如果它可以幫助:

source 'http://rubygems.org' 

gem 'rails', '3.0.1' 

# Bundle edge Rails instead: 
# gem 'rails', :git => 'git://github.com/rails/rails.git' 

gem 'sqlite3-ruby', :require => 'sqlite3' 
gem 'gravatar_image_tag' 

group :development do 
    gem 'rspec-rails' 
    gem 'annotate-models' 
end 

group :test do 
    gem 'rspec' 
    gem 'webrat' 
    gem 'spork' 
    gem 'factory_girl_rails' 
end 

回答

7

也許你應該嘗試新的語法(見工廠女孩github readme

FactoryGirl.define :user do |user| 
    user.name     "Michael Hartl" 
    user.email     "[email protected]" 
    user.password    "foobar" 
    user.password_confirmation "foobar" 
end 
+0

謝謝,這樣做! – bobaboba 2010-10-21 19:51:52

12

我得到了完全相同的錯誤信息。我剛剛重新啓動了我的Spork服務器和Autotest,一切都變成了綠色。

+0

+1這從我的教程中修復了FactoryGirl版本的問題。 – cschol 2011-04-12 03:14:31

+0

+1重新啓動Spork只是神奇地爲我工作。 – Zeiga 2011-10-04 07:53:17

0

對我來說,我不得不添加require 'factory_girl'test_helper.rb

2

我有這個問題,但它是因爲我已經劃歸開發部分,而不是Gemfile中的測試部分工廠女孩寶石。一旦在測試部分下,它就起作用了。一個區別我的進入和你之間,我注意到的是,我的規定1.0:

group :test do 
    gem 'rspec-rails', '2.6.1' 
    gem 'webrat', '0.7.1' 
    gem 'factory_girl_rails', '1.0' 
end 
0

我的解決辦法:我不小心把它包含在:development塊,根本不得不將它移動到:test

(我在這裏列出了它,因爲它可能會幫助那些不正確地按照教程進行操作的人)

-1

我決定使用最新版本的Factory Girl,所以我嘗試修改代碼。沒有爲我工作,所以我用

gem 'factory_girl_rails', '1.0' 

中的Gemfile 1.0

bundle update 

重啓叉勺和自動測試鎖定版和它的工作。

19

根據最新版本的Factory Girl(目前v4.0.0) 重寫工廠。RB

FactoryGirl.define do 
    factory :user do 
    name     "Michael Hartl" 
    email     "[email protected]" 
    password    "foobar" 
    password_confirmation "foobar" 
    end 
end 

然後從用戶控制器的規格稱其爲:

FactoryGirl.create(:user) 
3

在你規範使用

@user = FactoryGirl(:user) 

,而不是

@user = Factory(:user) 
+3

而不是FactoryGirl(:user),使用@Postscripter – 2013-03-30 10:42:17

+1

創建的useFactoryGirl.create(:user)被隱式調用 – jeremiemv 2013-04-17 06:53:39

0

我已經這樣做了, add require 'factory_girl'test_helper.rb

@user = FactoryGirl.create(:user)