Настройка Factory Girl с помощью Test::Unit и Musta
-
18-09-2019 - |
Вопрос
Я пытаюсь настроить 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
и тогда все работало нормально.