見つけるために、添付ませクラスは、私はこのエラーを取得していない:どのようにFixtureClassNotFoundを解決するのです:私のテストを実行しているとき
FixtureClassNotFound: No class attached to find
このエラーの原因は何とそれを修正する方法?
見つけるために、添付ませクラスは、私はこのエラーを取得していない:どのようにFixtureClassNotFoundを解決するのです:私のテストを実行しているとき
FixtureClassNotFound: No class attached to find
このエラーの原因は何とそれを修正する方法?
ほとんどのカスタムテーブル名がモデルに使用されているので、これは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
をフィクスチャファイルは
注:スタックトレースと完全なエラーメッセージを含めると便利です。テスト/ test_helper.rbクラスで
は、
fixtures :all
のような行があるこれは、ディレクトリのテスト/備品に見て、それがそこに見ているYAMLファイルのそれぞれをロードしようとするフレームワークを伝えますそれらをDBに保存します。だから、私の感想は、あなたがそこにapp/modelsのクラスを持たないファイルがあることです。つまり、ファイルtest/fixtures/posts.ymlがある場合、テストを実行すると、フレームワークはPostという名前のクラスを探してデータをロードします。
モデルクラスの1つに関連付けられていないフィクスチャファイルがあるかどうか確認します(モデルを削除したが、フィクスチャを削除するのを忘れた可能性があります)。
それでも問題が解決しない場合は、あなたのテストヘルパーは、必要なフィクスチャを明示的にロードする必要があります。だから、あなたが唯一のポストという名前のオブジェクトとUserという名前のオブジェクトのための備品をロードしたい場合は、あなたが変更されます。
fixtures :all
をtest_helper.rbで
fixtures :posts, :users
に、あなたはエラーが離れて行くのを見なければなりません(あなたの備品が
ロブのお返事ありがとうございます。私は実際に解決策を見つけ出し、答えとして追加しました。 –
多くの単体テストファイルに "フィクスチャ:all"がある場合、そのモデルからフィクスチャを使用する場所だけでなく、各ファイルにset_fixture_classを配置する必要があることに注意してください。これは私を本当に混乱させましたが、コーヒーの後では意味があります。私はむしろ、この情報が何らかの形でモデル自体にDRYされていると思います。 – mcr
I my_table_name.ymlと呼ばれるべきですいくつかのスキャフォールドコードを生成したときにこのエラーが発生しました。私は複数のモデル名を使用しましたが、それはちょうど照明器具の読み込みを混乱させた、と思います。特異なモデル名で足場を再生して問題を解決しました。クラスは、それが--force-plural
フラグ Iを使用して作成されている可能性などfish
、sms
命名の面で不規則なクラスがある場合には
。あなたは、このような例は、クラスを使用すると認識することができます。このように、この
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
それを宣言しました
あなたのクラスがモジュールにない場合(あなたの答えは100%明確ではありません)、Railsのインフレクターが正しく特異化する方法を知らない奇妙なモデル名のためかもしれません。その場合は、config/initializers/inflections.rbにカスタム変項を追加する方が良いでしょう。他の領域でも問題を引き起こす可能性が高いからです。 – hermannloose
この行を追加した後も同じエラーが発生しました。エラーがArgumentErrorに変更されました:ArgumentError:StringとClassの比較が失敗しました – wasipeer
@wasipeer: 'set_fixture_class my_table_name:MyModule :: MyClass' –