Вопрос

Я пытаюсь настроить Factory Girl с Test::Unit и Musta в Ruby on Rails.Я установил драгоценный камень, создал файл фабрики в каталоге test/factories и файл спецификации в каталоге 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 
Это было полезно?

Решение

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

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.Я еще не понял, почему не происходит автовключение, упомянутое в файле readme "factory_girl".

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

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

Также убедитесь, что у вас установлена ​​последняя версия драгоценного камня:

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

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

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

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

require 'factory_girl'
FactoryGirl.find_definitions

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

Я попробовал это после прочтения rdoc Factory Girl, где говорится о необходимости поместить config.gem в вашу среду.

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

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

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

При запуске одиночных тестов в Textmate все работало нормально, но запуск, например.все модульные тесты из командной строки с использованием rake test: units завершились неудачно с ошибкой DuplicationDefinitionError (я читал, что это, вероятно, как-то связано с 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/models/factories/** вместо *test/factories/**.

Вместо того, чтобы называть фабричный файл test_factory.rb, попробуйте назвать его Factory.rb.

Интересный.У меня была аналогичная проблема при попытке заставить огурец работать с Factory_girl.Изначально я настроил Factory_girl для поиска («config.gem»), но не загружал ее в среде огурца и полностью требовал в «features/support/env.rb», так же, как огурец делает для webrat и т. д.Это начало работать только тогда, когда я явно сказал Factory_girl найти его определения, как предложил Кенни выше.

Когда я удалил оператор require из 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):

Если вы хотите использовать 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+).

я добавилrequire 'factory_girl' require File.dirname(ФАЙЛ) + "/factories" в spec_helper.rb, что помогло, но потом я вспомнил, что Spork иногда может вызывать небольшие проблемы, поэтому я перезапустил Spork без require и тогда все работало нормально.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top