我必须承认我是新手测试,所以我正在尝试使用Factory Girl测试我的前几个Rspec。一切顺利,直到我尝试使用工厂女孩。
我的配置如下
规格/ spec_helper.rb
ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'rspec/autorun'
require 'database_cleaner'
require 'factory_girl_rails'
Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
RSpec.configure do |config|
config.fixture_path = "#{::Rails.root}/spec/fixtures"
config.use_transactional_fixtures = true
config.infer_base_class_for_anonymous_controllers = false
config.order = "random"
config.include FactoryGirl::Syntax::Methods
config.before(:each) do
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
end
end
规格/模型/ role_spec.rb
require 'spec_helper'
describe Role do
it "is valid" do
role = FactoryGirl.build(:role)
expect(role).to be_valid
end
end
规格/ factories.rb
FactoryGirl.define do
factory :role do
rolesymbol "tst-admin"
name "test admin"
end
end
然而,当我运行bundle exec rspec或rake spec时,我收到以下错误
Failures:
1) Role is valid
Failure/Error: role = FactoryGirl.build(:role)
ArgumentError:
Factory not registered: role
# ./spec/models/role_spec.rb:12:in `block (2 levels) in <top (required)>'
对我来说,FactoryGirl似乎正在工作,角色定义正确,并且规范通常有效,所以我不知道发生了什么。有什么想法吗?
迈克尔
答案 0 :(得分:1)
我参加派对的时间有点迟了,但在Rails引擎中尝试使用带有RSpec的FactoryGirl时遇到了同样的问题。我通过在spec / spec_helper.rb文件中明确设置工厂女孩定义路径来解决问题
FactoryGirl.definition_file_paths = [File.expand_path('../factories', __FILE__)]
FactoryGirl.find_definitions
目录结构正如您所期望的那样:
root/
spec/
spec_helper.rb
a_spec_file.rb
factories/
my_factory.rb
根据FactoryGirl文档,这个结构应该开箱即用(https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md#defining-factories)。我没有调查为什么对我来说不是这样的。 (关于SO的第一个回复,如果这里有任何错误,请道歉!)
答案 1 :(得分:0)
尝试将require'factory_girl'添加到您的factories.rb?
答案 2 :(得分:-1)
我甚至稍后参加了聚会,但是我通过将factories
目录移动到spec/support/factories
的(现在)更标准的路径来解决这个问题 - 现在,rspec已经无需进一步了解它需要告诉它在哪里看。