2016-08-26 6 views
0

私は主にSeleniumでUIオートメーションを書いています。本当に独立した並列実行可能なテストを書くためには、必要なテストデータ(ユーザーアカウントなど)を動的に作成して破壊するテストが必要です実行時にFactory Girlは、他のテストで使用する永続的なテストデータ/成果物を効率的に作成するために使用できますか?

これらのテストデータを作成するためのUIオートメーションテストケースのセットアップ手順を活用することができますが、今後のプロジェクトにはAPIがないことやそのようなことを行うことができる公的にアクセス可能なサービス。

開発者は、このようなことを作成するためにRailsテストでFactory Girlを使用していると言われています。同様のデータを作成するためにすでに行った作業を利用できることを期待しています。独自のデータベースインジェクションスクリプトを作成して管理したり、UIオートメーションが実際にUIなどでこのテストデータを作成しようとするのを避けたいと考えています。

だから!実際にテストデータを作成するためのユーティリティであり、テスト中のシステムの外部からリモートでオンデマンドでトリガできるカスタムrspecテストを書いたと仮定すると、Factory Girlはワイプしないように呼び出すことができますそれが実行される前にデータベースを削除し、作成したデータも破棄しないでください。開発者は既にFactory Girlがテスト用の適切なデータを作成していることを確認しているので、それをピギーバックして永続的なテストアカウントを作成するために使用することは可能です。ありがとう!

答えて

1

あなたが探しているのは、RSpecのtransactional_fixturesをオフにすることです。 spec_helperファイルを適宜更新してください。

# spec/spec_helper.rb 

RSpec.configure do |config| 
    # allow test data to persist between transactions 
    config.use_transactional_fixtures = false 
end 

これはブルートフォースアプローチです。 UIのエンドツーエンドテストでは理解できますが、単体テストではあまり良いことではありません。これは、単体テストをデータベース内の特定の状態に依存しないランダムな独立した方法で実行する必要があるためです。

1つの良いアプローチは、実行中のテストのタイプに応じてトランザクションフィクスチャを条件付きでオンまたはオフに設定することです。

ここトピックに関する記事です:https://weilu.github.io/blog/2012/11/10/conditionally-switching-off-transactional-fixtures/

あなただけの1つのテストのためのトランザクションの備品を無効にしたい場合は、記述ブロックでそれをオフに切り替えることができます。

describe "YourAwesomeFeature" do 
    self.use_transactional_fixtures = false 
+0

感謝を!トランザクションのフィクスチャ設定でFactory Girlで作成したものが多くのテストで永続化できるようになるのは聞こえますが、Factory Girlはまだ最後に行ったすべてを取り消しますか?私はそれをしないようにする必要があります - それは永久に作成したすべてのものを残し、rspecテストが終了した後に誰かがシステムとやりとりできるようにする必要があります。それはDatabase Cleanerの機能です。#cleanを持っていないのであれば、DBにすべてのものを永久に残しますか? –

+0

FactoryGirlは何も削除しません。文字通り、オブジェクトを生成する「ファクトリ」であると考えてください。単体テストを行っておらず、オブジェクトをデータベースに残しておくという唯一のユースケースがある場合、 'transactional_fixtures'をオフにすると正常に動作します。データベースクリーナーを使用する必要はありません。 – binarymason

+0

クール。単体テストが行​​われていますが、問題はないと思います。開発者は、必要なデータを生成し、db内の他のデータについて特定の前提を設定しない、Factory Girlを使用してユニットやその他のテストを作成します。これらのテストは、独自の小さなバブルで独自のデータを作成/破壊する必要があります。私のテストの意図は、その機能をハイジャックし、実際にテストデータを作成するためのユーティリティである特別な "テスト"を呼び出すことです。これらのテストは終了し、作成したデータを使用してUIテストを実行します。 –

関連する問題