Ruby on rails 3.2 rails 3.2环境中的factory_girl_rails 4.1.0生产';工厂未注册:用户';

Ruby on rails 3.2 rails 3.2环境中的factory_girl_rails 4.1.0生产';工厂未注册:用户';,ruby-on-rails-3.2,factory-bot,rspec-rails,Ruby On Rails 3.2,Factory Bot,Rspec Rails,我是一名工厂女孩noob,无法确定工厂未“注册”的原因。不知道在哪里注册 文件的相关部分: ... group :development, :test do gem 'rspec-rails' gem 'factory_girl_rails' end group :test do gem 'faker' gem 'capybara' gem 'guard-rspec' gem 'launchy' end ... config/application.rb的相关部分:

我是一名工厂女孩noob,无法确定工厂未“注册”的原因。不知道在哪里注册

文件的相关部分:

...
group :development, :test do
  gem 'rspec-rails'
  gem 'factory_girl_rails'
end

group :test do
  gem 'faker'
  gem 'capybara'
  gem 'guard-rspec'
  gem 'launchy'
end
...
config/application.rb的相关部分:

...
module Appname
  class Application < Rails::Application
    ...
    config.generators do |g|
      g.test_framework :rspec,
        :fixtures => true,
        :view_specs => false,
        :helper_specs => false,
        :routing_specs => true,
        :controller_specs => true,
        :request_specs => true
      g.fixture_replacement :factory_girl, :dir => "spec/factories"
    end
    ...
  end
end
$rspec spec/models/user_spec.rb的结果:

require 'spec_helper'

describe User do
  it "has a valid factory" do
    FactoryGirl.create(:user).should be_valid
  end
  ...
end
Failures:

  1) User has a valid factory
     Failure/Error: FactoryGirl.create(:user).should be_valid
     ArgumentError:
       Factory not registered: user

更新:

spec/factories/users.rb:

require 'faker'

FactoryGirl.define do
  factory :contact do |f|
    f.first_name { Faker::Name.first_name }
    f.last_name { Faker::Name.last_name }
    f.email { Faker::Internet.email }
    f.password { Faker::Name.last_name }
    f.password_confirmation { Faker::Name.last_name }
  end
end

感谢您的帮助。

在您的
应用程序/spec/factories/
文件夹中创建
user.rb
并编写

require 'factory_girl'

FactoryGirl.define do
  factory :user do
    lname "test12"
    fname "test12"
    ... # whatever
  end
end
在您的
用户规范rb

describe User do
  before { @user = FactoryGirl.create(:user, :fname => "abc", :lname => "fname") }
  subject { @user }
  it { should respond_to(:fname) }
  it { should respond_to(:lname)}
  it { should be_valid }
end

从评论线程:您可能希望将工厂中的
factory:contact
更改为
factory:user

FactoryGirl.define do
  factory :user do |f|
    ...
  end
end

您是否为用户创建了工厂?类似于
FactoryGirl.define{factory:user…}
。裁判:@shioyama,谢谢。我向工厂更新了问题。很抱歉,我遗漏了它。@shioyama,我将尝试创建一个没有伪造数据的标准版本,看看它是否能通过。问题不在于伪造数据,而是你没有用户工厂。伪造只需填写值,你也可以用某个电子邮件地址替换
Faker::Name.email
Faker::last_name
以姓氏等命名。您编写的工厂是联系人的工厂,而不是用户的工厂。+1表示获得的洞察力。我会试一试,让你知道结果如何。