Ruby on rails 3 Rails 3工厂\女孩工厂未注册

Ruby on rails 3 Rails 3工厂\女孩工厂未注册,ruby-on-rails-3,rspec2,factory-bot,Ruby On Rails 3,Rspec2,Factory Bot,我必须承认,我是测试新手,所以我尝试了我的前几个Rspec与工厂女孩测试。一切都很顺利,直到我尝试使用工厂女孩 我的配置如下 spec/spec_helper.rb ENV["RAILS_ENV"] ||= 'test' require File.expand_path("../../config/environment", __FILE__) require 'rspec/rails' require 'rspec/autorun' require 'database_cleaner' req

我必须承认,我是测试新手,所以我尝试了我的前几个Rspec与工厂女孩测试。一切都很顺利,直到我尝试使用工厂女孩

我的配置如下

spec/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
规格/型号/角色\u规格rb

require 'spec_helper'

describe Role do
  it "is valid" do
    role = FactoryGirl.build(:role)
    expect(role).to be_valid
  end
end
spec/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)>'
故障:
1) 角色是有效的
失败/错误:role=FactoryGirl.build(:role)
参数错误:
工厂未注册:角色
#./spec/models/role_spec.rb:12:in'block(2层)in'
对我来说,FactoryGirl似乎在工作,角色定义正确,规范正常工作,所以我不知道发生了什么。有什么想法吗


Michael

尝试将require'factory\u girl'添加到您的工厂。rb?

我参加这次聚会有点晚,但我在Rails引擎中尝试使用带RSpec的FactoryGirl时遇到了同样的问题。通过在spec/spec\u helper.rb文件中显式设置factory girl定义路径,我解决了这个问题

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文档,这种结构应该是开箱即用的()。我还没有调查过为什么我不是这样。(第一次回复也是如此,如果这里有什么问题,请道歉!)

我参加聚会的时间更晚了,但我通过将
工厂
目录移动到(现在)解决了这个问题
spec/support/factories的更多标准路径
-rspec现在可以获取它,而无需告诉它在哪里查找。

如果使用build(:role)而不是FactoryGirl.build(:role),会发生什么。这将使用FactoryGirl的rspec帮助程序,而不是直接调用FactoryGirlNice idea,但问题相同。有没有办法知道工厂女孩注册了什么。我有一种不愉快的感觉,工厂没有注册。可能是因为工厂使用单一文件的错误。尝试将factories.rb移动到spec/factories/roles.rb(注意文件名的复数形式,每次都会得到我)是的,我也尝试过,但得到了相同的结果。还尝试了“工厂女孩轨道”好的,有点逃避,但我转向了制造,它工作得很好。我会继续观察工厂女工的情况,虽然这对我不起作用。我仍然有rspec找不到工厂防御的问题。它可能对你不起作用,但对我起作用,因此它是一个有效的答案,对一些人很有帮助。反对票是“这个答案没有用”。。。事实就是如此——不是每个人都能从答案中得到帮助,但它对那些有帮助的人仍然有用。也就是说,人们不应该对这种回答投反对票,所以你可能希望保持你对那些回答“你是傻瓜”或类似回答的人的声誉;)