Em spec / factories / post_factory.rb:
FactoryGirl.define do
factory :post do
user
title Faker::Lorem.sentence
body Faker::Lorem.paragraphs
end
end
Com isso, recebo este erro:
... factory_girl-2.6.1/lib/factory_girl/registry.rb:39:in `add_as': Factory already registered: post (FactoryGirl::DuplicateDefinitionError)
Se eu mudar factory :post
para factory :a_post, class: Post
ou qualquer outro nome, funcionará bem. As únicas outras fábricas que defini são usuário e sessão (e essas funcionam bem).
Estou fazendo algo errado ou há algum post-factory interno definido automaticamente que me impede de usar esse nome?
Existem alguns problemas potenciais, supondo que você tenha _100% positivo_ que nenhuma outra pós-fábrica exista (essa é a primeira coisa que eu verificaria). Você está usando a gema factory_girl_rails
e Rails 3? Em caso afirmativo, certifique-se de não exigir factory_girl_rails
em qualquer lugar em seu spec_helper ou qualquer outro arquivo que seria carregado durante seus testes. Além disso, certifique-se de não estar chamando FactoryGirl.find_definitions
, o que carregará todas as fábricas; executá-lo duas vezes é uma maneira infalível de ver esse erro. Finalmente, você está ligando para require "spec/factories/post_factory"
algum lugar? factory_girl_rails
carregará todas as fábricas, então isso é desnecessário.
FactoryGirl não cria nenhuma fábrica para você por padrão, então não vai interferir na sua fábrica.
Welp. Aparentemente, quando eu gerei o modelo de post, um test / factories / posts.rb foi criado, mas eu estava apenas procurando no diretório spec porque uso RSpec.
Eu removi isso e tudo funciona. Obrigado.
Ah, incrível! Achei que provavelmente fosse o culpado.
Comentários muito úteis
Existem alguns problemas potenciais, supondo que você tenha _100% positivo_ que nenhuma outra pós-fábrica exista (essa é a primeira coisa que eu verificaria). Você está usando a gema
factory_girl_rails
e Rails 3? Em caso afirmativo, certifique-se de não exigirfactory_girl_rails
em qualquer lugar em seu spec_helper ou qualquer outro arquivo que seria carregado durante seus testes. Além disso, certifique-se de não estar chamandoFactoryGirl.find_definitions
, o que carregará todas as fábricas; executá-lo duas vezes é uma maneira infalível de ver esse erro. Finalmente, você está ligando pararequire "spec/factories/post_factory"
algum lugar?factory_girl_rails
carregará todas as fábricas, então isso é desnecessário.FactoryGirl não cria nenhuma fábrica para você por padrão, então não vai interferir na sua fábrica.