ArgumentError:工厂未注册:user - Hartl Chapter 7.1.3

时间:2013-04-28 19:25:00

标签: ruby-on-rails

我无法通过Michael Hartl的Ruby on Rails教程Chapter 7.1.3进行测试。

以下是错误消息:

Failures:

  1) User pages profile page 
     Failure/Error: let(:user) { FactoryGirl.create(:user) }
     ArgumentError:
       Factory not registered: user
     # ./spec/requests/user_pages_spec.rb:8:in `block (3 levels) in <top (required)>'
     # ./spec/requests/user_pages_spec.rb:9:in `block (3 levels) in <top (required)>'

  2) User pages profile page 
     Failure/Error: let(:user) { FactoryGirl.create(:user) }
     ArgumentError:
       Factory not registered: user
     # ./spec/requests/user_pages_spec.rb:8:in `block (3 levels) in <top (required)>'
     # ./spec/requests/user_pages_spec.rb:9:in `block (3 levels) in <top (required)>'

Finished in 2.72 seconds
37 examples, 2 failures

Failed examples:

rspec ./spec/requests/user_pages_spec.rb:11 # User pages profile page 
rspec ./spec/requests/user_pages_spec.rb:12 # User pages profile page

这是我的user_pages_spec.rb:

require 'spec_helper'

describe "User pages" do

  subject { page }

  describe "profile page" do
    let(:user) { FactoryGirl.create(:user) }
    before { visit user_path(user) }

    it { should have_selector('h1',    text: user.name) }
    it { should have_selector('title', text: user.name) }
  end

  describe "signup page" do
    before { visit signup_path }

    it { should have_selector('h1',    text: 'Sign up') }
    it { should have_selector('title', text: 'Sign up') }
  end
end

这是我的个工厂.rb:

FactoryGirl.define do
  factory :user do
    name     "Michael Hartl"
    email    "mhartl@example.com"
    password "foobar"
    password_confirmation "foobar"
  end
end

这是Gemfile

group :test do
  gem 'capybara', '1.1.2'
  gem 'cucumber-rails', '1.2.1', :require => false
  gem 'database_cleaner', '0.7.0'
  gem 'factory_girl_rails', '1.4.0'
end

我尝试重新启动服务器,并运行bundle exec rake db:resetdb:test:preparedb:test:loaddb:migrate - 似乎没有任何效果。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

如果您关注Michael Hartl的指南,您可能也在使用sporkguard。除非spork重新启动,否则spork不会注意工厂的更新。

如果您使用它们,请尝试重新启动sporkguard