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 
Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top