8

Minitest コントローラー テストは、単独で実行すると正常に動作しますrake minitest:controllersが、実行するrake minitest:allと検証失敗エラーが発生します。これは、電子メールがモデル テストで既に使用されているためです。DatabaseCleaner を使用してデータベースをクリーンアップしましたが、データベースをクリーンアップできませんでした。

データベースクリーナーの私のコード:

require "database_cleaner"
DatabaseCleaner.strategy = :transaction

class MiniTest::Rails::ActionController::TestCase
    include Devise::TestHelpers

    def setup
      DatabaseCleaner.start
    end

    def teardown
      DatabaseCleaner.clean
    end
4

5 に答える 5

14

簡潔な答え:

gem install "minitest-around"

長い答え:

minitest の before/after または setup/teardown は rspec のようなフックではありません。したがって、minitest で複数の before/after または setup/teardown を使用することはできません。これは、メソッドを再定義するだけであるためです。

この問題を解決するには、複数の/または/およびminitest-aroundのサポートを追加する を使用して、gem をテスト グループに追加するだけです。beforeaftersetupteardownaround

# put in your Gemfile
gem 'minitest-around', group: :test

database_cleaner をセットアップする場合は、必要に応じて使用できます。セットアップの例を次に示します。

# tests/support/database_cleaner.rb
DatabaseCleaner.strategy = :transaction
DatabaseCleaner.clean_with(:truncation)

class Minitest::Rails::ActionController::TestCase
  def setup
    DatabaseCleaner.start
  end

  def teardown
    DatabaseCleaner.clean
  end
end

そしてあなたのテストファイルで:

# tests/your/test/file_test.rb
require 'support/database_cleaner'

# assertions here ...

それだけです。詳細については、Githubを参照してください。

于 2015-02-16T10:36:34.147 に答える
4

私は間違いを見つけました、それは他の誰かを助けるかもしれません..

すべてのテスト ファイルでセットアップ メソッドを上書きしているので、セットアップが定義されているすべてのモデル テストのセットアップで DatabaseCleaner.start を記述する必要があります。

于 2013-03-28T08:56:28.497 に答える
0

これでその繰り返しをDRYできます

DatabaseCleaner.strategy = :truncation
class MiniTest::Spec
  before :each do
    DatabaseCleaner.clean
  end
end

この例では spec runner をサブクラス化していますが、選択したテスト環境を選択できます。

于 2014-07-17T13:23:52.853 に答える