Ошибка конфликта между Factory_girl и Factory_girl_rails - PullRequest
3 голосов
/ 11 сентября 2011

Ниже приведено сообщение об ошибке при запуске спецификации rspec:

/ factory_girl-2.1.0 / lib / factory_girl / registry.rb: 38: в `add_as ': уже определено: пользователь (FactoryGirl :: DuplicateDefinitionError)

Установлены как factory_girl (2.1.0), так и factory_girl_rails (1.2.0). Это сообщение об ошибке исчезает, если factory_girl 2.1.0 удалена (однако вызвала другую ошибку неопределенного метода) Однако та же настройка не вызывает проблем при работе на другом ноутбуке с rspec.

Вот часть вывода команды bundle show.

  • огурец (1.0.2)
    • огурцы-рельсы (1.0.2)
    • database_cleaner (0.6.7)
    • diff-lcs (1.1.2)
    • эрубис (2,7,0)
    • execjs (1.2.4)
    • factory_girl (2.1.0)
    • factory_girl_rails (1.2.0)
    • ffi (1.0.9)
    • корнишон (2,4,5)
    • поход (1.2.1)
    • i18n (0.6.0)
    • jquery-рельсы (1.0.13)
    • JSON (1,5,3)
    • json_pure (1.5.3)
    • почта (2.3.0)
    • MIME-типы (1.16)
    • multi_json (1.0.3)
    • нокогири (1.5.0)
    • полиглот (0.3.2)
    • стойка (1.3.2)
    • стеллаж-кеш (1.0.3)
    • для монтажа в стойку (0,8,3)
    • rack-ssl (1.3.2)
    • рейк-тест (0.6.1)
    • рельсы (3.1.0)
    • рельсы (3.1.0)
    • грабли (0.9.2)
    • rdoc (3.9.4)
    • rspec (2.6.0)
    • rspec-core (2.6.4)
    • rspec-ожидания (2.6.0)
    • rspec-mocks (2.6.0)
    • rspec-рельсы (2.6.1)
    • rubyzip (0.9.4)
    • sass (3.1.7)
    • sass-rails (3.1.0.rc.6)
    • селен-вебдрайвер (2.4.0)
    • simple_form (1.4.2)

Вот часть gemfile для factory_girl и rspec.

group :test do
  # Pretty printed test output
  gem "rspec-rails", ">= 2.0.0"
  gem "cucumber-rails", ">=0.3.2"
  gem 'webrat', ">= 0.7.2" 
  gem 'factory_girl_rails'
  gem 'turn', :require => false
end

Есть мысли? Спасибо.

Ответы [ 10 ]

6 голосов
/ 16 декабря 2011
gem 'factory_girl_rails', :require => false

, который исправил это для меня:)

3 голосов
/ 12 октября 2011

В предыдущих версиях Factory_Girls вы должны были сделать

требуют «фабрики»

в ваших спецификациях / тестах. С последними Factory Girls вам не нужно явно указывать требования в спецификациях. Поэтому, если вы используете в ваших файлах обязательные «фабрики», удалите их и попробуйте, ошибка DuplicateDefinitionError исчезнет.

1 голос
/ 01 февраля 2013

Убедитесь, что у вас нет нескольких заводов с одинаковым именем, это одна из причин, которая вызывает ошибку

Попытка определить несколько заводов с одинаковым именем вызовет ошибку.

1 голос
/ 05 марта 2012

Кроме того, если вы назовете свой фабричный файл как: factories/factory_user_spec.rb rspec будет думать, что это спецификация и запустит ее, тогда фабрикант будет нуждаться в этом, дважды определит ее.

1 голос
/ 25 января 2012

В моем случае я дважды определял: user factory как в spec / factories.rb , так и в новом файле, который factory_girl_rails (1.4.0) создал при запуске модели:

spec / factories / users.rb

Удалил этот файл и больше никаких проблем.

1 голос
/ 20 октября 2011

Как говорит Арен, ошибка может быть обязательной «фабрикой». Подобным образом, требование одной фабрики для другой фабрики может вызвать ошибку.Например, если существует база наследования одной таблицы с именем Actors и подклассифицированный Commenter, для файла фабрики Actor может потребоваться вложенный файл для Commenter:'

Это требует вызывает дублирование определения, потому что (по-видимому) файл также был автоматически загружен. текущие документы не дают ясного объяснения.

1 голос
/ 20 сентября 2011

Была такая же проблема.Оказывается, у меня была спецификация, которая называлась так же, как моя фабрика, и это приводило к ошибке.

У меня были и spec / models / user_spec.rb и spec/factories/user_spec.rb

Я переименовал spec / factories / user_spec.rb в spec / factories / user_factory.rb и все прошло нормально.

1 голос
/ 16 сентября 2011

Я решил проблему, в конце концов избавившись от драгоценного камня factory_girl_rails. До сих пор не знаю, как это случилось. В моей системе не установлен вид спорта.

Спасибо, что поделились.

1 голос
/ 15 сентября 2011

rake db:test:prepare Это исправило ту же ошибку для меня (не знаю почему), надеюсь, это кому-нибудь поможет.Я думал, что это проблема spork + factory_girl_rails, но оказалось, что это не так.Теперь я использую spork + fgr без проблем.

1 голос
/ 14 сентября 2011

У меня была такая же проблема. Это означает, что вы случайно загружаете свои фабрики дважды. Вы можете вывести некоторый текст в журнал из верхней части вашего файла фабрики, чтобы увидеть, загружается ли он дважды.

Моя проблема была со Spork: он использует магию для отключения заводской перезагрузки factory_girl_rails, и вам нужно загружать фабрики более управляемым способом в своем spec_helper, но по какой-то причине он не будет работать в последней версии гема. Я только что удалил Spork, и теперь он работает нормально.

...