2

Rails Testデータベースにデータを入力しようとしていますが、問題が発生しています。

問題なく動作する開発データベースを休ませ、生成し、データを取り込むために使用するスクリプトがあります。基本的には

namespace :db do
  desc "Fill database with sample data"
    task populate: :environment do
      Rake::Task['db:reset'].invoke
      --Create all my dummy data here---
    end
  end
 end

次に、コマンドを実行します。

bundle exec rake db:populate
bundle exec rake db:test:prepare

最初のコマンドは、上記のrakeタスクを使用してデータベースをリセットしてデータを入力しますが、2番目のコマンドはデータ構造を再作成するだけで、データを入力しません。

一部のRSPecテストにアクセスできるようにするためにこれを行っていますが、これに間違ってアプローチしているのではないかと思いますか?TDDのテストデータベースにテストデータ(構造のみ)を含めるべきではありませんか?代わりに、すべてが常にフィクスチャから実行される必要がありますか?

4

2 に答える 2

3

私の経験では、rake タスクの実行や他の外部プロセスを使用してテスト データを入力することに依存しないことをお勧めします。テスト自体の中でデータの読み込みを行いspec/support、必要に応じて重複を避けるためにヘルパーを配置する必要があります。

私はテストデータをロードするためのあらゆる種類の戦略を見てきましlibた.少し。

についてdb:test:prepareは、Rails ガイドによると、単に「保留中の移行をチェックし、テスト スキーマをロードする」だけです。実際のデータはロードされません。

http://guides.rubyonrails.org/testing.html#preparing-your-application-for-testing

それが役立つことを願っています!

于 2013-01-14T03:02:35.107 に答える
1

しかし、私はこれに間違ってアプローチしているのだろうか?TDDのテストデータベースにテストデータ(構造のみ)を含めるべきではありませんか?代わりに、すべてが常にフィクスチャから実行されるべきですか?

一般に、はい、テストデータベースは空である必要があります。テストデータベースにデータが入力されていて、テスト間でクリーンアップされていない場合、テストの実行順序に応じて異なるテスト結果が得られる可能性があります。

フィクスチャ、または最近ではより一般的にはファクトリを使用して、実行前に各テストのデータを入力できます。フィクスチャはフィクスチャファイルからデータベース全体にデータを入力するため、テストごとに多くの不要なデータを入力することになります。ファクトリでは、テスト自体に入力するデータを指定します(特定のデータと関連するレコードは、ファクトリ定義によって処理されます)。

人気のある工場のいくつかはfactory_girlです:https ://github.com/thoughtbot/factory_girlとMachinist:https ://github.com/notahat/machinist

また、database_cleanerのようなものも必要になります。https ://github.com/bmabey/database_cleaner-database_cleanerは、各テスト間でデータベースをワイプするので、クリーンな状態でテストを開始します。

ここにrailscastがあります:http://railscasts.com/episodes/158-factories-not-fixtures工場での作業の基本

于 2013-01-14T03:08:18.113 に答える