1

これまでのところ、フィクスチャやシードデータではなく、rspecとファクトリのみを使用しています。しかし、統合テスト(rspec + capybara、cukeではなく)を実行するときにアプリで使用できるように、構成データのレコードが1ダースほどある(静的)クーポンテーブルが必要になりました。

私のrspecテストには、ストアを作成するFactoryGirlファクトリがあります。

私のアプリでは、ストアがinit_store(coupon_code)によって初期化されると、さまざまな機能をオン/オフにするクーポンコードが渡されます(クーポンテーブルでそのクーポンの設定を検索することにより)。

したがって、ストアファクトリを作成するときは、クーポンコードも(特性を介して)指定する必要があります。次に、私のモデルでは、ストアを初期化するメソッドは、クーポンコードを使用して、クーポンテーブルの一連の設定を検索します。(各クーポンには、さまざまなストア機能をオン/オフにする約20の属性があります。)

私のcoupons.ymlファイルには、私のアプリで使用される実際のクーポンテーブルデータが含まれています。次に、テストの実行時にアプリでそれらを利用できるようにする必要があります。(「もろい」は気にしないでください。このテーブルは変更されません。)

フィクスチャまたはrspecでデータをシードしていないので、coupons.ymlファイルを配置する方法/場所、およびテストの実行中にアプリで利用できるようにクーポンをテストクーポンテーブルに「ロード」する方法がわかりません。 。

シードデータにcoupons.ymlを事前入力しますか?もしそうなら、テストを実行するたびにそれをテストデータベースにロードするにはどうすればよいですか?

または、器具を使用する必要がありますか?

いずれにせよ、coupons.ymlはどこに行くべきで、どのようにロードすればよいですか(ストアファクトリで?スペックの1つで?specs_helperで?)

「フィクスチャとファクトリを使用する」や「rspecでシードデータを使用する」などを検索すると、「ファクトリを使用する」というアドバイスしか見つかりません。しかし、この特定の状況では両方が必要なので、助けていただければ幸いです。

4

1 に答える 1

6

私はこのようなことをし、フィクスチャではなくシードを使用します(ただし、フィクスチャも使用できると確信しています)。

spec_helper.rb内

RSpec.configure do |config|

  ...

  config.before :suite do
    DatabaseCleaner.strategy = :truncation, {:except => %w[table1 table2]}
    DatabaseCleaner.clean_with :truncation
    Rails.application.load_seed
  end

  ...

end

したがって、DatabaseCleaner.strategy行は、渡すテーブルの配列を除くすべてをクリーンアップするようにdatabase_cleanerに指示しています。

Rails.application.load_seed戦略を設定した後、シードデータをロードするために呼び出すだけです。

お役に立てば幸いです。ご不明な点がありましたらお知らせください。

于 2012-10-05T04:23:31.783 に答える