Ruby on rails 3.2 rails 3.2环境中的factory_girl_rails 4.1.0生产';工厂未注册:用户';
我是一名工厂女孩noob,无法确定工厂未“注册”的原因。不知道在哪里注册 文件的相关部分: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的相关部分:
...
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表示获得的洞察力。我会试一试,让你知道结果如何。