Rspec 工厂女孩:工厂没有注册
我从事的项目结构如下:Rspec 工厂女孩:工厂没有注册,rspec,ruby-on-rails-3.2,factory-bot,Rspec,Ruby On Rails 3.2,Factory Bot,我从事的项目结构如下: projects/warehouse/core projects/warehouse/products/bottles projects/warehouse/products/boxes 在这个项目中,应用程序逻辑、gem等都在核心应用程序中。我为rspec设置了框,例如: projects/warehouse/products/boxes/spec /factories /models factories目录包含cubics.rb: FactoryG
projects/warehouse/core
projects/warehouse/products/bottles
projects/warehouse/products/boxes
在这个项目中,应用程序逻辑、gem等都在核心应用程序中。我为rspec设置了框
,例如:
projects/warehouse/products/boxes/spec
/factories
/models
factories
目录包含cubics.rb
:
FactoryGirl.define do
factory :cubic
id 1
dimension 12
end
end
require 'spec_helper'
describe Boxes::Cubic do
it "has a valid factory" do
FactoryGirl.create(:cubic).should be_valid
end
end
models
目录包含cubic\u spec.rb
:
FactoryGirl.define do
factory :cubic
id 1
dimension 12
end
end
require 'spec_helper'
describe Boxes::Cubic do
it "has a valid factory" do
FactoryGirl.create(:cubic).should be_valid
end
end
Cubic
模型位于products/box/app/models/box/Cubic.rb
中
module Boxes
class Cubic < BoxExBase
self.table_name = 'containers'
#validation stuff goes here
end
end
core
中的gem文件在开发、测试组中包含gem'factory\u girl\u rails'
。我甚至试图让工厂提出一个错误,但那根本没有发生。因此,这家工厂似乎根本就没有装货。我需要做什么才能加载并注册此工厂?您可以尝试以下两种方法:
- 将
gem'factory\u girl\u rails'
放入框中
应用程序
- 使用factory在堆芯内部创建一个样本rspec并运行它
我认为你的应用程序并没有从核心加载宝石,它只是加载业务逻辑。正如@Vinh Tran所建议的,factory\u girl\u rails
确实需要在您正在使用的应用程序的Gemfile
中:
group :development, :test do
gem 'rspec-rails'
gem 'factory_girl_rails'
end
此外,虚拟应用程序需要位于/spec
目录下,尽管在这一点上,它似乎没有填充实际的模型,等等
最后,rspec
命令需要从box
目录发出,而不是从core
目录发出。所有这些结合在一起,使我们能够成功注册工厂并成功地进行测试运行。您需要帮助虚拟应用程序(或rails控制台)退出,因为FactoryGirl将查看rails.root,即spec/dummy
例如,从spec/dummy中启动的控制台执行以下操作:
FactoryGirl.definition_file_paths = %w(../factories)
FactoryGirl.find_definitions
# You can use this line to see what factories are loaded
# FactoryGirl.factories
对于您的特殊情况,您需要更改实际位置,但如果FactoryGirl找不到您的工厂,那是因为它不知道要去哪里找
具体地说:以下是我所做的。我的需求如下-我需要从Gem根目录运行rspec。但我还需要能够从嵌入式虚拟项目运行rails控制台,并访问Factory girl,以便在开发过程中方便地创建测试对象
TLDR将此代码添加到虚拟应用程序的application.rb中
console do
FactoryGirl.definition_file_paths << Pathname.new("../factories")
FactoryGirl.definition_file_paths.uniq!
FactoryGirl.find_definitions
end
├── spec
│ ├── dummy
│ │ ├── app
│ │ ├── bin
│ │ ├── config
│ │ │ ├── environments
│ │ │ ├── initializers
│ │ │ ├── locales
│ │ │ ├── application.rb << This is the file to add the lines in.
当我的规范没有以\u spec.rb
结尾时,我得到了这个。RubyMine毫无问题地运行了单元测试,除Factory Girl外,其他一切正常。谢谢!我马上给你打一针。我暂时被重新安排了。我对延迟表示歉意,但将宝石放入盒子应用程序没有任何影响。当使用工厂时,rspec在内核中工作。将gem放入框中时,您遇到了什么错误?相同错误FactoryNotRegistered
?相同错误。一位同事已经想出了解决办法。我很快就会发帖的。
s.add_development_dependency 'rspec-rails'
s.add_development_dependency 'capybara'
s.add_development_dependency 'factory_girl_rails'
s.add_development_dependency 'shoulda'
s.add_development_dependency 'vcr'
s.add_development_dependency 'byebug'
s.add_development_dependency 'better_errors'
s.add_development_dependency 'binding_of_caller'