Настройка Factory Girl с тестом :: Юнит и Муста - PullRequest
16 голосов
/ 21 июля 2009

Я пытаюсь настроить Factory Girl с помощью Test :: Unit и Shoulda в Ruby on Rails. Я установил гем, создал свой заводской файл в каталоге test / factories и создал мой spec-файл в каталоге test / models. Текущая ошибка, которую я получаю: «ArgumentError: Нет такой фабрики: test», что заставляет меня поверить, что файл 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 

Ответы [ 13 ]

40 голосов
/ 01 сентября 2009

Я столкнулся с этой проблемой и в одном из моих проектов. Я не уверен точно, что является причиной пропуска кода инициализации, но вы можете принудительно загрузить фабричные определения следующим образом:

require 'factory_girl'
Factory.find_definitions

Надеюсь, это поможет.

3 голосов
/ 01 апреля 2011

Только что обнаружил factory_girl_rails, где говорится, что автозагрузка - это единственная дополнительная вещь, которую он имеет https://github.com/thoughtbot/factory_girl_rails

3 голосов
/ 23 ноября 2009

Попробуйте поместить это в test_helper.rb:

require 'factory_girl'
Dir.glob(File.dirname(__FILE__) + "/factories/*").each do |factory|
  require factory
end
2 голосов
/ 24 июля 2010

Если у вас возникла эта проблема с ruby ​​1.9.2, require ожидает расширенный путь.

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

Этот патч решил мою проблему. Я только что отправил запрос на удаление. После этого вы можете добавить это к вашему test_helper.rb:

require 'factory_girl'
FactoryGirl.find_definitions
2 голосов
/ 18 декабря 2009

Мне также удалось избавиться от этой проблемы, поместив эту строку в мою среду.rb:

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

Удостоверьтесь, что у вас есть самая последняя драгоценность:

Имя изменено с "thinkbot-factory_girl" на "factory_girl", источник изменен с "http://gems.github.com" на" http://gemcutter.org".

2 голосов
/ 12 ноября 2009

У меня была такая же проблема. В конце концов я обошелся, поместив все свои фабрики в "/test/factories.rb" и написав следующие строки в моем файле "/test/test_helper.rb":

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

Вы можете сделать то же самое для нескольких файлов, указав их в test_helper. Я еще не понял, почему автоматическое включение, упомянутое в readme "factory_girl's", не происходит.

1 голос
/ 19 октября 2010

Я также столкнулся с проблемой - после обновления FactoryGirl до версии 1.3.2 - что фабрики из тестов / фабрики больше не загружались автоматически.

Я мог бы избавиться от проблемы, добавив код из dg в test_helper.rb:

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

При запуске отдельных тестов в Textmate все работало нормально, но, например, работает. все модульные тесты из командной строки с использованием rake test: блоки завершились с ошибкой 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
1 голос
/ 23 ноября 2009

Если бы мне потребовалось только 'factory_girl' в test_helper.rb, я бы получил то же поведение, о котором вы упоминали, но если бы я потребовал его в моем config / test / environment.rb (заметьте, я использую environmentist ) он бы безошибочно нашел определение фабрики.

Я попробовал это после прочтения заводской девушки rdoc, где написано, чтобы поместить config.gem в вашу среду.

0 голосов
/ 19 сентября 2011

я добавил require 'factory_girl' require File.dirname(<strong>FILE</strong>) + "/factories" to spec_helper.rb, что и помогло, но потом я вспомнил, что Spork может иногда иметь небольшую проблему, поэтому я перезапустил Spork без require, и тогда он работал нормально.

0 голосов
/ 25 августа 2011

Поскольку разные люди используют разные версии Rails (в настоящее время наиболее распространены 2.x и 3.x), важно включить другие подходящие части вашей среды (наиболее важным из которых является то, какую версию Rails вы используете). снова). С веб-страницы factory_girl, документация версии 1.3.0 (http://rubydoc.info/gems/factory_girl/1.3.0/frames):

Если вы хотите использовать factory_girl с Rails 3, используйте Драгоценный камень factory_girl_rails, а не этот.

Если вы хотите использовать factory_girl с версиями Rails до Rails 3, используйте версию 1.2.4.

Если у вас возникли проблемы с загрузкой, я рекомендую убедиться, что вы используете правильную версию. Полагаю, что версии factory_girl больше 1.2.4 вводятся как зависимости для гема factory_girl_rails (Rails 3.0+).

...