Подтвердить что ты не робот

Настройка Factory Девушка с тестом:: Unit и Shoulda

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

Ответ 1

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

require 'factory_girl'
Factory.find_definitions

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

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

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

Ответ 5

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

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

Убедитесь, что у вас есть последний камень:

Название изменено с "thoughtbot-factory_girl" на "factory_girl", источник изменен с " http://gems.github.com" до " http://gemcutter.org".

Ответ 6

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

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

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

require 'factory_girl'
FactoryGirl.find_definitions

Ответ 7

Если мне требуется только "factory_girl" в test_helper.rb, я бы получил такое же поведение, о котором вы говорили, но если бы это было необходимо в моей конфигурации /test/environment.rb(обратите внимание, что я использую environmentalist) он правильно нашел бы определение Factory без каких-либо проблем.

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

Ответ 8

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

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

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

При выполнении одиночных тестов в Textmate все работает нормально, но работает, например. все модульные тесты из командной строки с использованием теста rake: сбой модулей с помощью 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

Ответ 9

Вы пробовали переместить

require 'factory_girl'

к вашему тесту /test _helper.rb?

Механизм автоматической загрузки factory может зависеть от того, где вызывается требование. Он мог бы попытаться найти фабрики * test/models/factory/** вместо * test/factories/**

Ответ 10

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

Ответ 11

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

Когда я удалил выражение require из env.rb и полностью выполнил factory_girl в среде огурца, эффект исчез, и factory_girl работал из коробки.

Таким образом, действительно возникает вопрос о том, когда (или в каком контексте) загружается factory_girl.

Ответ 12

Поскольку разные люди используют разные версии Rails (2.x и 3.x являются наиболее распространенными сейчас), важно включить другие соответствующие части вашей среды (наиболее важной из которых является версия Rails, re on). На веб-странице 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+).

Ответ 13

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