我试图建立工厂女孩与测试::单位和早该在Ruby on Rails的。我已经安装了宝石,创造了我厂的文件测试/工厂目录下,测试/型号目录下创建我的规格文件。当前的错误,我得到的是“引发ArgumentError:没有这样的工厂:测试”,这使我相信,test_factory.rb文件没有被加载?任何想法,我应该改变什么?

下面是我的文件。

#test/factories/test_factory.rb
Factory.define :test do |t|  
  t.name 'test_spotlight'  
  t.label 'test spotlight label'  
end

#test/modes/test_spec.rb
require 'test_helper'
require 'factory_girl'
class TestTest < Test::Unit::TestCase
  def setup
    @test = Factory.build(:test)
  end

  context "A test" do
    should "save with the minimum requirements" do
      assert @test.save
    end
  end 
end 
有帮助吗?

解决方案

我已经在我的一个项目遇到这个问题了。我不知道正是什么导致初始化代码被跳过,但你可以强制加载这样的工厂的定义:

require 'factory_girl'
Factory.find_definitions

希望这有助于。

其他提示

尝试把此在test_helper.rb中:

require 'factory_girl'
Dir.glob(File.dirname(__FILE__) + "/factories/*").each do |factory|
  require factory
end

刚发现factory_girl_rails,那里说的是自动加载它 https://github.com/的唯一的额外thoughtbot / factory_girl_rails

我有同样的问题。最后,我做的把我所有的工厂“/test/factories.rb”和我的“/test/test_helper.rb”文件写入以下行做的:

require 'factory_girl'
require File.dirname(__FILE__) + "/factories"

您可以通过要求他们在test_helper做多个文件同样的事情。我还没有想通了,为什么自动包含在“factory_girl的”自述不会发生提及。

我也设法通过把此行到我的environment.rb摆脱这个问题:

config.gem "factory_girl", :source => "http://gemcutter.org"

同时也要确保您有最新的宝石:

名称从 “thoughtbot-factory_girl” 到 “factory_girl”,源从改变“ HTTP://gems.github。 COM ”到 “ http://gemcutter.org ”。

如果你有这个问题有红宝石1.9.2,要求预计扩充的路径。

File.expand_path("test/factories.rb")

补丁解决我的问题。我刚刚给拉请求。 之后,你可以将它添加到您的test_helper.rb

require 'factory_girl'
FactoryGirl.find_definitions

如果我只需要“factory_girl”在test_helper.rb中,我会得到你所提到的相同的行为,但如果我需要在我的config /测试/ environment.rb文件(注意我用的环保)它会准确地找到没有任何问题的工厂定义。

我读工厂女孩RDoc的地方说,把config.gem在您的环境后,尝试这样做。

我也碰到了问题 - 更新FactoryGirl至1.3.2之后 - 这从试验工厂/工厂没有自动加载任何更多

我可以通过从DG添加代码到test_helper.rb中除掉的问题:

Dir.glob(File.dirname(__FILE__) + "/factories/*.rb").each do |factory|
 require factory
end

当在运行的TextMate单个的测试中,一切运行良好,但例如运行使用耙测试命令行所有的单元测试:单元失败,一个DuplicateDefinitionError(我读它有可能是一些使用Ruby 1.8.x的做)。因此,我稍微改变的代码:

if (!Factory.factories || Factory.factories.empty?)
  Dir.glob(File.dirname(__FILE__) + "/factories/*.rb").each do |factory|
    require factory
  end
end

您是否尝试过移动所述

require 'factory_girl'

您的测试/ test_helper.rb中的?

在工厂自动装载机构可取决于所述需要被称为其中。它可以试图找到工厂*测试/模型/工厂/ **,而不是*测试/工厂/ **

相反,命名您的工厂文件test_factory.rb,尽量将其命名为factory.rb

有趣。我有一个类似的问题,试图让黄瓜factory_girl工作。我原本配置factory_girl要寻找(“config.gem”),但没有加载在黄瓜环境,充分需要“功能/支持/ env.rb”,同样的黄瓜确实为webrat,等等。这只是开始工作时,我明确告诉factory_girl找到其定义为肯尼以上建议。

当我删除了需要从env.rb声明,完全需要factory_girl在黄瓜环境,效果走了,factory_girl工作开箱。

因此,它确实似乎是当(或其中上下文)factory_girl获取加载的问题。

由于不同的人使用Rails的不同版本(2.x和3.x现在是最常见的),它包括环境的其他相关部件是很重要的(最重要的是它的Rails版本,你”重新上)。从 factory_girl网页,版本1.3.0文档(http://rubydoc.info/gems/factory_girl/1.3.0/frames):

  

如果你想使用Rails 3使用factory_girl,使用   factory_girl_rails宝石,而不是这一个。

     

如果您想与到Rails 3之前的Rails版本使用factory_girl,   使用版本1.2.4。

如果您遇到加载麻烦,我建议确保您使用的是正确的版本。 factory_girl比1.2.4更大的版本,我假定,被带来了作为依赖关系为“factory_girl_rails”(滑轨3.0+)的宝石。

我添加 require 'factory_girl' require File.dirname(FILE) + "/factories" 到spec_helper.rb whiche帮助,但然后我rememberd叉勺有时BA有点问题,所以我重新启动叉勺而不require然后它工作得很好。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top