Setup Factory Girl com Test :: Unit e Shoulda
-
18-09-2019 - |
Pergunta
Eu estou tentando configurar Factory Girl com Test :: Unit e Shoulda em Ruby on Rails. Eu instalei o gem, criado meu arquivo fábrica sob o diretório de teste / fábricas e criei o meu arquivo de especificações sob o diretório test / modelos. O erro atual que estou recebendo é 'ArgumentError: No such fábrica: test', o que me leva a crer que o arquivo test_factory.rb não está sendo carregado? Qualquer idéia sobre o que eu deveria mudar?
Aqui estão os meus arquivos.
#test/factories/test_factory.rb
Factory.define :test do |t|
t.name 'test_spotlight'
t.label 'test spotlight label'
end
e
#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
Solução
Eu executar para esse problema em um dos meus projetos também. Não tenho certeza exatamente o que está causando o código de inicialização para ser ignorado, mas você pode forçar carregar as definições de fábrica como esta:
require 'factory_girl'
Factory.find_definitions
Espero que isso ajude.
Outras dicas
Tente colocar isso em test_helper.rb:
require 'factory_girl'
Dir.glob(File.dirname(__FILE__) + "/factories/*").each do |factory|
require factory
end
Apenas descoberto factory_girl_rails, onde ele diz que o carregamento automático é a única coisa extra que tem https://github.com/ Thoughtbot / factory_girl_rails
Eu tive o mesmo problema. Eventualmente eu fazer, colocando todas as minhas fábricas em "/test/factories.rb" e escrevendo as seguintes linhas no meu arquivo "/test/test_helper.rb":
require 'factory_girl'
require File.dirname(__FILE__) + "/factories"
você poderia fazer a mesma coisa para vários arquivos, obrigando-os na test_helper. Eu ainda não descobri por que a auto-incluem que é mencionados no readme "do factory_girl" não acontece.
Eu também conseguiu se livrar deste problema, colocando esta linha em meu environment.rb:
config.gem "factory_girl", :source => "http://gemcutter.org"
Certifique-se também que você tem a última pérola:
Nome alterado de "Thoughtbot-factory_girl" para "factory_girl", fonte alterada de " http: //gems.github. com " para " http://gemcutter.org ".
No caso de você tive esse problema com Ruby 1.9.2, requerem espera que o caminho expandido.
File.expand_path("test/factories.rb")
Este remendo resolvido meu problema. Acabei de enviar uma solicitação de recebimento.
Depois disso, você pode adicionar este a sua test_helper.rb
:
require 'factory_girl'
FactoryGirl.find_definitions
Se eu só necessário 'factory_girl' em test_helper.rb, gostaria de obter o mesmo comportamento que você mencionou, mas se eu exigisse na minha config / test / environment.rb (note que eu uso ambientalista ) que iria encontrar corretamente a definição de fábrica sem qualquer problema.
Eu tentei isso depois de ler o rdoc menina fábrica onde ele diz para colocar config.gem em seu ambiente.
Eu também corri para o problema - depois de atualizar FactoryGirl para 1.3.2 -. Que as fábricas de teste / fábricas não foram carregados automaticamente mais
Eu poderia se livrar do problema, adicionando o código de dg em test_helper.rb:
Dir.glob(File.dirname(__FILE__) + "/factories/*.rb").each do |factory|
require factory
end
Ao executar testes individuais em Textmate, tudo funcionou bem, mas correndo por exemplo todos os testes de unidade a partir da linha de comando usando rake test: unidades falhou com um DuplicateDefinitionError (eu li que ele tem provavelmente algo a ver com 1.8.x rubi). Então eu ligeiramente alterado o código:
if (!Factory.factories || Factory.factories.empty?)
Dir.glob(File.dirname(__FILE__) + "/factories/*.rb").each do |factory|
require factory
end
end
Você tentou mover o
require 'factory_girl'
para o seu test / test_helper.rb ?
O mecanismo fábrica de auto-carregamento pode depender de onde o a exigir é chamado. Pode ser tentando encontrar fábricas * teste / models / fábricas / ** em vez de * test / fábricas / **
Em vez de nomear seu arquivo test_factory.rb fábrica, tente nomeá-lo factory.rb
Interessante. Eu tive um problema semelhante tentando obter pepino para trabalhar com factory_girl. Eu tinha originalmente configurado factory_girl ser procurada ( 'config.gem'), mas não carregado no ambiente de pepino e totalmente necessário em 'características / support / env.rb', mesmo que o pepino faz para webrat, etc. Isso só começou a trabalho quando eu disse explicitamente factory_girl para encontrar suas definições como Kenny sugerido acima.
Quando eu removi a declaração do env.rb e factory_girl totalmente necessário requerer no ambiente de pepino, o efeito foi embora e factory_girl trabalhou fora da caixa.
Então, ele realmente parece ser uma questão de quando (ou em que contexto) factory_girl é carregado.
Uma vez que diferentes pessoas estão usando diferentes versões do Rails (2.x e 3.x, sendo o mais comum agora), é importante incluir as outras peças pertinentes do seu ambiente (o ser mais importante que versão do Rails você' re diante). A partir da página web factory_girl, versão documentação 1.3.0 (http://rubydoc.info/gems/factory_girl/1.3.0/frames):
Se você quiser usar factory_girl com Rails 3, use o factory_girl_rails gem, não esta.
Se você quiser usar factory_girl com versões Rails antes do Rails 3, utilize a versão 1.2.4.
Se você está tendo problemas com o carregamento, eu sugiro certificando-se de que você está usando a versão correta. As versões de maior factory_girl do que 1.2.4, eu supor, são trazidos como dependências para os 'factory_girl_rails' (Rails 3.0+) jóia.
Eu adicionei
require 'factory_girl'
require File.dirname(FILE) + "/factories"
para spec_helper.rb whiche ajudou, mas então eu rememberd Spork pode, por vezes ba um pouco de um problema, então eu reiniciado Spork sem a require
e, em seguida, ele funcionou bem.