2011-08-11 4 views

答えて

24

ほとんどのカスタムテーブル名がモデルに使用されているので、これはset_table_nameを使用して(たまたま)、またはモデルがモジュールである。

をloaded.0されていないため、他のエラーが今見えるかもしれないが

はあなたが前にtest_helper.rbでset_fixture_classの行を追加する必要があり、解決するには、「備品:すべての」行:この場合

class ActiveSupport::TestCase 

    self.use_transactional_fixtures = true 
    . 
    . 
    . 
    set_fixture_class :my_table_name => "MyModule::MyClass" 

    fixtures :all 

end 

をフィクスチャファイルは

+9

あなたのクラスがモジュールにない場合(あなたの答えは100%明確ではありません)、Railsのインフレクターが正しく特異化する方法を知らない奇妙なモデル名のためかもしれません。その場合は、config/initializers/inflections.rbにカスタム変項を追加する方が良いでしょう。他の領域でも問題を引き起こす可能性が高いからです。 – hermannloose

+2

この行を追加した後も同じエラーが発生しました。エラーがArgumentErrorに変更されました:ArgumentError:StringとClassの比較が失敗しました – wasipeer

+2

@wasipeer: 'set_fixture_class my_table_name:MyModule :: MyClass' –

1

注:スタックトレースと完全なエラーメッセージを含めると便利です。テスト/ test_helper.rbクラスで

は、

fixtures :all 

のような行があるこれは、ディレクトリのテスト/備品に見て、それがそこに見ているYAMLファイルのそれぞれをロードしようとするフレームワークを伝えますそれらをDBに保存します。だから、私の感想は、あなたがそこにapp/modelsのクラスを持たないファイルがあることです。つまり、ファイルtest/fixtures/posts.ymlがある場合、テストを実行すると、フレームワークはPostという名前のクラスを探してデータをロードします。

モデルクラスの1つに関連付けられていないフィクスチャファイルがあるかどうか確認します(モデルを削除したが、フィクスチャを削除するのを忘れた可能性があります)。

それでも問題が解決しない場合は、あなたのテストヘルパーは、必要なフィクスチャを明示的にロードする必要があります。だから、あなたが唯一のポストという名前のオブジェクトとUserという名前のオブジェクトのための備品をロードしたい場合は、あなたが変更されます。

fixtures :all 

をtest_helper.rbで

fixtures :posts, :users 

に、あなたはエラーが離れて行くのを見なければなりません(あなたの備品が

+0

ロブのお返事ありがとうございます。私は実際に解決策を見つけ出し、答えとして追加しました。 –

+0

多くの単体テストファイルに "フィクスチャ:all"がある場合、そのモデルからフィクスチャを使用する場所だけでなく、各ファイルにset_fixture_classを配置する必要があることに注意してください。これは私を本当に混乱させましたが、コーヒーの後では意味があります。私はむしろ、この情報が何らかの形でモデル自体にDRYされていると思います。 – mcr

0

I my_table_name.ymlと呼ばれるべきですいくつかのスキャフォールドコードを生成したときにこのエラーが発生しました。私は複数のモデル名を使用しましたが、それはちょうど照明器具の読み込みを混乱させた、と思います。特異なモデル名で足場を再生して問題を解決しました。クラスは、それが--force-pluralフラグ Iを使用して作成されている可能性などfishsms 命名の面で不規則なクラスがある場合には

0

。あなたは、このような例は、クラスを使用すると認識することができます。このように、この

ActiveSupport::Inflector.inflections(:en) do |inflect| 
    inflect.plural /^(ox)$/i, '\1en' 
    inflect.singular /^(ox)en/i, '\1' 
    inflect.irregular 'person', 'people' 
    inflect.uncountable %w(fish sheep) 
end 

ある config/initializers/inflections.rb

の下に設定されている変曲を設定します、その場合の電子 rails g model sms --force-plural

それを宣言しました

関連する問題