没有rails的RSpec没有加载spec / support中的文件

时间:2015-04-04 01:33:01

标签: ruby rspec factory-bot

在文件spec / support / factory_girl.rb中我有

fail "At least this file is being required"

RSpec.configure do |config|
  config.include FactoryGirl::Syntax::Methods
end

我有一些规范代码

require 'pmc_article'
require 'pmc_article_parser'
require 'factory_girl'
require_relative './factories/pmc_article_factory'

RSpec.describe PMCArticle do
  let(:pmc_article) do
    build(:pmc_article)
  end

  it 'parses pmid' do
    expect(pmc_article.article_id_pmid).to eq '123456'
  end
end

但是当我运行bundle exec rspec时,我得到了

  1) PMCArticle parses pmid
     Failure/Error: build(:pmc_article)
     NoMethodError:
       undefined method `build' for #<RSpec::ExampleGroups::PMCArticle:0x007feac3cc5078>
     # ./spec/pmc_article_spec.rb:8:in `block (2 levels) in <top (required)>'
     # ./spec/pmc_article_spec.rb:12:in `block (2 levels) in <top (required)>'

我认为rspec未能要求spec/support/factory_girl.rb,即使factory girl getting started guide说我应该将文件放在那里。

我在启动项目时运行了命令行命令来初始化rspec,这是在我使用工厂女孩进行项目之前。

为什么RSpec在spec / support中加载文件?

2 个答案:

答案 0 :(得分:3)

规范/支持没有什么神奇之处。如果你使用rspec-rails,那么它用来添加一行自动加载所有内容但从3.1.0开始它不会 - 看到这个commit)。

我只能假设工厂女孩博士假设存在这个现已停用的功能。您可以通过添加

为项目启用此功能
Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }

对于您的规范帮助器,当然您可以将config.include行移动到主spec_helper文件中。

在非rails世界中,将Rails.root替换为项目根目录的任何位置。

答案 1 :(得分:1)

虽然FactoryGirl指南建议在support / factory_girl.rb中配置RSpec,但您仍需要手动要求该文件。我建议在spec_helper中添加以下内容:

require 'factory_girl' # require the gem
require_relative './support/factory_girl' # this should point to the factory_girl.rb file.