10

rake test:unitsフィクスチャの必要なデータが欠落しているため、現在のアプリケーションで失敗します。

rake db:fixtures:load RAILS_ENV=test単体テストを介してフィクスチャを手動でロードしている場合、テストは機能していますが、rakeはテストデータベースをパージします。

私のtest_helperが含まれfixtures :allていて、私のテストはそれを継承しています-しかし、フィクスチャは単にロードされていません。

私は今のところ無知で、本当に助けが必要かもしれません!

私はたくさん試しましたが、それはこのプロジェクトで使用されているいくつかの環境設定またはプラグインに関係していると思います。テスト環境用にロードされているファイルについてどこで読むか知っている人はいますか?

4

5 に答える 5

6

fixtures :allスーパークラス(test_helper)ではなく、テストクラスに呼び出しを配置し​​ます。私の推測では、スーパークラスの初期化は期待どおりに機能してfixtures :allおらず、呼び出されていません。おそらく、test_helperのinitializeメソッドに呼び出しを入れてみてください。

test/test_helper.rbはこのように見えます:

ENV['RAILS_ENV'] ||= 'test'
require File.expand_path('../../config/environment', __FILE__)
require 'rails/test_help'

class ActiveSupport::TestCase
  # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.
  fixtures :all

  # Add more helper methods to be used by all tests here...
end
于 2009-10-10T14:52:38.013 に答える
5

もう1つのアプローチは、テスト用に独自のカスタムrakeタスクを作成することです。

例えば:


task :test_units do

  RAILS_ENV = 'test' # Force the environment to test

  puts "Recreate the test database"
  Rake::Task['db:test:prepare'].invoke

  puts "Seed the database with fixtures"
  Rake::Task['db:fixtures:load'].invoke

  puts "Executing Unit Tests"
  Rake::Task['test:units'].prerequisites.clear 
  Rake::Task['test:units'].invoke
end

于 2009-10-21T03:51:27.300 に答える
4

解決策はちょっとハッキーですが、私はついに問題を見つけました。

1つのプラグインは、データベースに少なくとも1つの行のデータがあることに依存しています。だから何が起こったのか:

  1. rakeはデータベーススキーマをロードします
  2. rakeは環境をロードしようとします
  3. 環境にはプラグインが含まれます
  4. 少なくとも1つの行が欠落しているため、プラグインのロードに失敗します
  5. 固定具はロードされません

ハッキーな解決策は、必要なデータをフィクスチャではなくスキーマに直接配置することです。これは、ロードが遅くなるためです。

より便利な解決策を探し、見つかった場合はこの回答を更新します。

于 2009-10-12T08:52:34.980 に答える
1

私の問題は、「require'test_helper'」を先頭に置くのを忘れています。例えば。

require 'test_helper'

class AdminUserTest < ActiveSupport::TestCase
  # test "the truth" do
  #   assert true
  # end
end
于 2018-01-03T08:59:00.317 に答える
0

私も同じ問題を抱えていました。むしろ、問題は、私のフィクスチャがデータベーススキーマに対応していないことでした。例外をスローする代わりに、railsはフォールバックソリューションとしてテストデータベースを使用しました。最も気難しい。

于 2010-09-28T10:41:35.837 に答える