我有跟随
group :test, :development do
gem 'rspec-rails', '~> 3.0'
gem "guard-rspec"
gem 'capybara'
gem 'factory_girl_rails'
gem 'turn'
gem 'guard' # NOTE: this is necessary in newer versions
gem 'poltergeist'
gem 'phantomjs', :require => 'phantomjs/poltergeist'
gem 'selenium-webdriver'
gem 'capybara-screenshot'
gem 'capybara-webkit'
gem 'zeus'
gem "parallel_tests"
gem 'launchy'
gem 'email_spec'
gem 'action_mailer_cache_delivery'
gem 'protractor-rails'
gem 'database_cleaner'
和我的spec_helper.rb
require 'capybara/rspec'
require 'factory_girl_rails'
require 'support/request_helpers'
RSpec.configure do |config|
config.include FactoryGirl::Syntax::Methods
config.include RequestHelpers
config.expect_with :rspec do |expectations|
expectations.include_chain_clauses_in_custom_matcher_descriptions = true
end
config.mock_with :rspec do |mocks|
mocks.verify_partial_doubles = true
end
end
最后,我在spec / support / request_helper.rb
中有这样一个spec帮助器module RequestHelpers
def create_logged_in_user
user = create(:user)
login(user)
user
end
def login(user)
login_as user, scope: :user
end
end
和factories.rb
# /spec/factories/factories.rb
FactoryGirl.define do
factory :user do
first "John"
last 'Smith'
email 'test@example.com'
password 'johnsmith123'
end
end
是每次我运行rpsec时都会显示
Factory not registered: user
当我在rails控制台中描述FactoryGirl.factories时,我可以看到用户'已注册
=> #<FactoryGirl::Registry:0x007fa4e0e18160
@items=
{
:user=>
#<FactoryGirl::Factory:0x007fa4e2371200
@aliases=[],
@class_name=nil,
@compiled=false,
@definition=
#<FactoryGirl::Definition:0x007fa4e2370f58
@additional_traits=[],
@attributes=nil,
@base_traits=[],
@callbacks=[],
@compiled=false,
@constructor=nil,
@declarations=
#<FactoryGirl::DeclarationList:0x007fa4e2370ee0
@declarations=
[#<FactoryGirl::Declaration::Static:0x007fa4e2370b48 @ignored=false, @name=:first, @value="john">,
#<FactoryGirl::Declaration::Static:0x007fa4e2370a80 @ignored=false, @name=:last, @value="smith">,
#<FactoryGirl::Declaration::Static:0x007fa4e23709b8 @ignored=false, @name=:email, @value="test@example.com">,
我多次阅读了Factory_girl_rails,rspec-rails的Github设置文档,但没有找到解决方案。
有谁知道我应该在哪里发现问题?
谢谢!
EDITED在2015年6月10日星期三更新了spec / rails_helper.rb的内容
ENV['RAILS_ENV'] ||= 'test'
require 'spec_helper'
require File.expand_path('../../config/environment', __FILE__)
require 'rspec/rails'
require 'capybara/poltergeist'
require 'capybara-screenshot/rspec'
Capybara.register_driver :poltergeist do |app|
Capybara::Poltergeist::Driver.new(app, :phantomjs => Phantomjs.path, :inspector => true)
end
Capybara.javascript_driver = :webkit
include Warden::Test::Helpers
RSpec.configure do |config|
config.infer_spec_type_from_file_location!
end
答案 0 :(得分:0)
我遇到了同样的问题
我不知道为什么FactoryBot仅在RSpec中找不到我们的工厂。 但是让FactoryBot明确地发现我的定义有效。
因此,您只需要将其添加到您的spec_helper中:
FactoryBot.find_definitions
就我而言,我遵循此答案中的一般说明:
https://stackoverflow.com/a/49436531/8790125
所以我创建了一个文件spec/support/factory_bot.rb
使用此代码(请注意find_definitions
):
require 'factory_bot'
RSpec.configure do |config|
config.include FactoryBot::Syntax::Methods
FactoryBot.find_definitions
end
,然后在rails_helper
上必需:
# ...
require 'rspec/rails'
require 'support/factory_bot'
# ...