2010-10-28 75 views
4

我用Rails 3/factory_girl_rails/Rspec的2和Ruby 1.8FactoryGirl:如何定義一個工廠沒有傳遞參數

我定義我的工廠是這樣的:

Factory.define :user do |u| 
    u.name  'Some guy' 
    u.sequence(:email) {|n| "person#{n}@example.com" } 
    u.password 'password' 
end 

Factory.define :password_reset_user, :parent => :user do |user| 
    user.password_reset_key '111222333444' 
end 

而且我的測試運行良好。

我注意到他們定義他們的榜樣工廠工廠女孩頁面上沒有通過參數後(http://github.com/thoughtbot/factory_girl):

# This will guess the User class 
FactoryGirl.define :user do 
    factory :user do 
    first_name 'John' 
    last_name 'Doe' 
    admin false 
    end 

    # This will use the User class (Admin would have been guessed) 
    factory :admin, :class => User do 
    first_name 'Admin' 
    last_name 'User' 
    admin true 
    end 

    # The same, but using a string instead of class constant 
    factory :admin, :class => 'user' do 
    first_name 'Admin' 
    last_name 'User' 
    admin true 
    end 
end 

在努力清理我的代碼,我試圖效仿定義工廠沒有通過參數後做,改變了我的代碼:

Factory.define :user do 
    factory :user do 
    name  'Some guy' 
    sequence(:email) {|n| "person#{n}@example.com" } 
    password 'password' 
    end 

    factory :password_reset_user, :parent => :post do 
    password_reset_key '111222333444'  
    end 
end 

但我得到的錯誤:

undefined method `factory' for main:Object (NoMethodError) 
    from /Library/Ruby/Gems/1.8/gems/factory_girl-1.3.2/lib/factory_girl/factory.rb:56:in `define' 
    from /web/votropolis/spec/factories.rb:1 
    from /Library/Ruby/Gems/1.8/gems/activesupport-3.0.1/lib/active_support/dependencies.rb:239:in `require' 
    from /Library/Ruby/Gems/1.8/gems/activesupport-3.0.1/lib/active_support/dependencies.rb:239:in `require' 
    from /Library/Ruby/Gems/1.8/gems/activesupport-3.0.1/lib/active_support/dependencies.rb:227:in `load_dependency' 
    from /Library/Ruby/Gems/1.8/gems/activesupport-3.0.1/lib/active_support/dependencies.rb:239:in `require' 
    from /Library/Ruby/Gems/1.8/gems/factory_girl-1.3.2/lib/factory_girl/factory.rb:307:in `find_definitions' 
    from /Library/Ruby/Gems/1.8/gems/factory_girl-1.3.2/lib/factory_girl/factory.rb:305:in `each' 
    from /Library/Ruby/Gems/1.8/gems/factory_girl-1.3.2/lib/factory_girl/factory.rb:305:in `find_definitions' 
    from /Library/Ruby/Gems/1.8/gems/factory_girl_rails-1.0/lib/factory_girl_rails/railtie.rb:11 
    from /Library/Ruby/Gems/1.8/gems/activesupport-3.0.1/lib/active_support/lazy_load_hooks.rb:34:in `call' 
    from /Library/Ruby/Gems/1.8/gems/activesupport-3.0.1/lib/active_support/lazy_load_hooks.rb:34:in `execute_hook' 
    from /Library/Ruby/Gems/1.8/gems/activesupport-3.0.1/lib/active_support/lazy_load_hooks.rb:43:in `run_load_hooks' 
    from /Library/Ruby/Gems/1.8/gems/activesupport-3.0.1/lib/active_support/lazy_load_hooks.rb:42:in `each' 
    from /Library/Ruby/Gems/1.8/gems/activesupport-3.0.1/lib/active_support/lazy_load_hooks.rb:42:in `run_load_hooks' 
    from /Library/Ruby/Gems/1.8/gems/railties-3.0.1/lib/rails/application/finisher.rb:46 
    from /Library/Ruby/Gems/1.8/gems/railties-3.0.1/lib/rails/initializable.rb:25:in `instance_exec' 
    from /Library/Ruby/Gems/1.8/gems/railties-3.0.1/lib/rails/initializable.rb:25:in `run' 
    from /Library/Ruby/Gems/1.8/gems/railties-3.0.1/lib/rails/initializable.rb:50:in `run_initializers' 
    from /Library/Ruby/Gems/1.8/gems/railties-3.0.1/lib/rails/initializable.rb:49:in `each' 
    from /Library/Ruby/Gems/1.8/gems/railties-3.0.1/lib/rails/initializable.rb:49:in `run_initializers' 
    from /Library/Ruby/Gems/1.8/gems/railties-3.0.1/lib/rails/application.rb:134:in `initialize!' 
    from /Library/Ruby/Gems/1.8/gems/railties-3.0.1/lib/rails/application.rb:77:in `send' 
    from /Library/Ruby/Gems/1.8/gems/railties-3.0.1/lib/rails/application.rb:77:in `method_missing' 
    from /web/votropolis/config/environment.rb:5 
    from /web/votropolis/spec/spec_helper.rb:3:in `require' 
    from /web/votropolis/spec/spec_helper.rb:3 
    from /web/votropolis/spec/controllers/organizations/memberships_controller_spec.rb:1:in `require' 
    from /web/votropolis/spec/controllers/organizations/memberships_controller_spec.rb:1 
    from /Library/Ruby/Gems/1.8/gems/rspec-core-2.0.1/lib/rspec/core/configuration.rb:306:in `load' 
    from /Library/Ruby/Gems/1.8/gems/rspec-core-2.0.1/lib/rspec/core/configuration.rb:306:in `load_spec_files' 
    from /Library/Ruby/Gems/1.8/gems/rspec-core-2.0.1/lib/rspec/core/configuration.rb:306:in `map' 
    from /Library/Ruby/Gems/1.8/gems/rspec-core-2.0.1/lib/rspec/core/configuration.rb:306:in `load_spec_files' 
    from /Library/Ruby/Gems/1.8/gems/rspec-core-2.0.1/lib/rspec/core/command_line.rb:18:in `run' 
    from /Library/Ruby/Gems/1.8/gems/rspec-core-2.0.1/lib/rspec/core/runner.rb:55:in `run_in_process' 
    from /Library/Ruby/Gems/1.8/gems/rspec-core-2.0.1/lib/rspec/core/runner.rb:46:in `run' 
    from /Library/Ruby/Gems/1.8/gems/rspec-core-2.0.1/lib/rspec/core/runner.rb:10:in `autorun' 
    from /Library/Ruby/Gems/1.8/bin/rspec:19 

我在做什麼錯?或者它是一個兼容性問題 - 也許factory_girl_rails(這是用於rails 3)不像factory_girl那樣工作)。

謝謝。

肖恩

+0

謝謝!我遇到了同樣的問題,這個帖子非常有幫助。 – bporter 2010-11-20 16:01:24

+0

請注意,在您使用的最後一個代碼中:factory:password_reset_user,:parent =>:post do而不是:factory:password_reset_user,:parent =>:user do – 2012-01-10 23:34:13

回答

相關問題