工厂未在rspec中注册,但在控制台中找到

时间:2015-06-10 04:36:47

标签: ruby-on-rails testing rspec factory-bot

我有跟随

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

1 个答案:

答案 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'
# ...

相关问题