В spec / factory / post_factory.rb:
FactoryGirl.define do
factory :post do
user
title Faker::Lorem.sentence
body Faker::Lorem.paragraphs
end
end
При этом я получаю эту ошибку:
... factory_girl-2.6.1/lib/factory_girl/registry.rb:39:in `add_as': Factory already registered: post (FactoryGirl::DuplicateDefinitionError)
Если я изменю factory :post
на factory :a_post, class: Post
или любое другое имя, оно будет работать нормально. Единственные другие фабрики, которые я определил, - это user и session (и они работают нормально).
Я что-то делаю не так, или есть какая-то внутренняя почтовая фабрика, которая определяется автоматически, что не позволяет мне использовать это имя?
Есть пара потенциальных проблем, если вы _100% положительно_, никакой другой почтовой фабрики не существует (это первое, что я проверю). Вы используете гем factory_girl_rails
и Rails 3? Если да, убедитесь, что вам не требуется factory_girl_rails
где-либо в вашем spec_helper или любом другом файле, который будет загружен во время ваших тестов. Также убедитесь, что вы не вызываете FactoryGirl.find_definitions
, который загрузит все фабрики; двойной запуск - верный способ увидеть эту ошибку. Наконец, вы куда-нибудь звоните require "spec/factories/post_factory"
? factory_girl_rails
загрузит все фабрики, поэтому в этом нет необходимости.
FactoryGirl по умолчанию не создает для вас никаких фабрик, поэтому это не помешает вашей фабрике.
Welp. Очевидно, когда я сгенерировал пост-модель, был создан test / factoryies / posts.rb, но я смотрел только в директорию spec, так как я использую RSpec.
Я удалил это, и все работает. Спасибо.
Ах, круто! Я подумал, что это, вероятно, виноват.
Самый полезный комментарий
Есть пара потенциальных проблем, если вы _100% положительно_, никакой другой почтовой фабрики не существует (это первое, что я проверю). Вы используете гем
factory_girl_rails
и Rails 3? Если да, убедитесь, что вам не требуетсяfactory_girl_rails
где-либо в вашем spec_helper или любом другом файле, который будет загружен во время ваших тестов. Также убедитесь, что вы не вызываетеFactoryGirl.find_definitions
, который загрузит все фабрики; двойной запуск - верный способ увидеть эту ошибку. Наконец, вы куда-нибудь звонитеrequire "spec/factories/post_factory"
?factory_girl_rails
загрузит все фабрики, поэтому в этом нет необходимости.FactoryGirl по умолчанию не создает для вас никаких фабрик, поэтому это не помешает вашей фабрике.