16

Ruby on Rails で Test::Unit と Shoulda を使用して Factory Girl をセットアップしようとしています。gem をインストールし、test/factories ディレクトリに factory ファイルを作成し、test/models ディレクトリに spec ファイルを作成しました。現在発生しているエラーは「ArgumentError: No such factory: test」です。これにより、test_factory.rb ファイルがロードされていないと思いますか? 私が何を変更すべきかについて何か考えはありますか?

これが私のファイルです。

#test/factories/test_factory.rb
Factory.define :test do |t|  
  t.name 'test_spotlight'  
  t.label 'test spotlight label'  
end

#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 
4

13 に答える 13

40

私も私のプロジェクトの1つでこの問題に遭遇しました。初期化コードがスキップされる原因は正確にはわかりませんが、次のようにファクトリ定義を強制的にロードできます。

require 'factory_girl'
Factory.find_definitions

お役に立てれば。

于 2009-08-31T20:08:35.793 に答える
3

これをtest_helper.rbに入れてみてください:

require 'factory_girl'
Dir.glob(File.dirname(__FILE__) + "/factories/*").each do |factory|
  require factory
end
于 2009-11-23T20:53:47.190 に答える
3

factory_girl_rails を発見しました。ここで、オートローディングが唯一の余分なものであると書かれています https://github.com/thoughtbot/factory_girl_rails

于 2011-04-01T10:37:18.107 に答える
2

ruby 1.9.2 でこの問題が発生した場合、requireは展開されたパスを期待します。

File.expand_path("test/factories.rb")

このパッチは私の問題を解決しました。プルリクエストを送信しました。その後、これをに追加できますtest_helper.rb

require 'factory_girl'
FactoryGirl.find_definitions
于 2010-07-24T15:06:28.000 に答える
2

また、environment.rb に次の行を追加することで、この問題を解決することができました。

config.gem "factory_girl", :source => "http://gemcutter.org"

また、最新の gem があることも確認してください。

名前が「thoughtbot-factory_girl」から「factory_girl」に変更され、ソースが「http://gems.github.com」から「 http://gemcutter.org 」に変更されました。

于 2009-12-18T09:59:35.100 に答える
2

私も同じ問題を抱えていました。最終的に、すべての工場を「/test/factories.rb」に置き、「/test/test_helper.rb」ファイルに次の行を書くことでやり遂げました。

require 'factory_girl'
require File.dirname(__FILE__) + "/factories"

test_helper でそれらを要求することにより、複数のファイルに対して同じことを行うことができます。「factory_girl の」readme に記載されている自動インクルードが行われない理由はまだわかりません。

于 2009-11-12T17:24:54.113 に答える
1

また、FactoryGirl を 1.3.2 に更新した後、テスト/ファクトリからのファクトリが自動的に読み込まれなくなったという問題にも遭遇しました。

dg のコードを test_helper.rb に追加することで、この問題を取り除くことができました。

Dir.glob(File.dirname(__FILE__) + "/factories/*.rb").each do |factory|
 require factory
end

Textmate で単一のテストを実行すると、すべて正常に動作しましたが、コマンド ラインから rake test:units を使用してすべての単体テストを実行すると、DuplicateDefinitionError で失敗しました (おそらく ruby​​ 1.8.x と関係があると読みました)。だから私はコードを少し変更しました:

if (!Factory.factories || Factory.factories.empty?)
  Dir.glob(File.dirname(__FILE__) + "/factories/*.rb").each do |factory|
    require factory
  end
end
于 2010-10-19T13:24:47.943 に答える
1

test_helper.rb で「factory_girl」のみが必要な場合は、あなたが言及したのと同じ動作が得られますが、config/test/environment.rb で必要な場合 ( environmentalistを使用していることに注意してください)、何も指定せずに Factory 定義を適切に見つけることができます。問題。

環境にconfig.gemを配置するように指示されている工場の女の子のrdocを読んだ後、これを試しました。

于 2009-11-22T22:24:02.920 に答える
0

面白い。キュウリを factory_girl で動作させようとして、同様の問題が発生しました。私はもともと factory_girl を検索するように設定していましたが ('config.gem')、キュウリ環境にロードされておらず、'features/support/env.rb' で完全に必要とされていました。ケニーが上で提案したように、 factory_girl にその定義を見つけるように明示的に指示したときに機能します。

env.rb から require ステートメントを削除し、キュウリ環境で factory_girl を完全に要求すると、その影響はなくなり、factory_girl はすぐに使用できるようになりました。

つまり、いつ (またはどのコンテキストで) factory_girl がロードされるかという問題のようです。

于 2010-03-09T12:09:55.403 に答える
0

さまざまな人がさまざまなバージョンの Rails を使用しているため (現在は 2.x と 3.x が最も一般的です)、環境に関連する他の部分を含めることが重要です (最も重要なのは、使用している Rails のバージョンです)。 . factory_girl Web ページ、バージョン 1.3.0 のドキュメント(http://rubydoc.info/gems/factory_girl/1.3.0/frames) から:

Rails 3 で factory_girl を使用する場合は、このジェムではなく factory_girl_rails ジェムを使用してください。

Rails 3 より前のバージョンの Rails で factory_girl を使用する場合は、バージョン 1.2.4 を使用してください。

読み込みに問題がある場合は、正しいバージョンを使用していることを確認することをお勧めします。factory_girl の 1.2.4 以降のバージョンは、'factory_girl_rails' (Rails 3.0+) gem の依存関係として取り込まれていると思います。

于 2011-08-24T21:52:02.213 に答える
0

私は spec_helper.rbに追加 しましたが、それは助けになりましたが、Spork が時々少し問題を起こす可能性があることを思い出したので、Spork なしで再起動すると、うまくいきました。require 'factory_girl' require File.dirname(FILE) + "/factories" require

于 2011-09-19T14:50:48.367 に答える
0

動かしてみましたか

require 'factory_girl'

あなたのtest/test_helper.rbに?

ファクトリの自動読み込みメカニズムは、require が呼び出される場所によって異なる場合があります。*test/factories/** の代わりに *test/models/factories/** の工場を見つけようとしている可能性があります

于 2009-07-21T21:01:42.157 に答える
0

ファクトリ ファイルに test_factory.rb という名前を付ける代わりに、factory.rb という名前を付けてみてください。

于 2009-07-22T03:03:41.943 に答える