2011-07-26 11 views
12

を共有してはいけません共有...RSpecのは例がこれは驚きで連れて行ってくれた

あなたはどこでもあなたのプロジェクト内の2つのRSpecの共有例えば、グループに同じ名前を使用することができないようです。そうした場合、rake spec(すべての仕様を実行する)を実行すると、rspecは共有されているサンプルグループが一意でない名前で宣言されていると苦情を言います。

これは、shared_examples_forへの呼び出しが記述ブロック内に含まれている場合でも発生します(例の範囲内にあるはずです)。

まず、私はサンプルグループの名前を変更することでこの問題を回避しようとしました(理想的ではありませんが、私はそれを使用しています)。

しかし、この例のグループを別のファイルに分解して、複数のスペックファイル間で共有できるようにしたい場合、これはもっと問題になりました。

スペックは孤立して実行しても問題ありませんが、スイートを実行するとrspecがエラーになります。

`ensure_shared_example_group_name_not_taken': \ 
Shared example group 'a person' already exists (ArgumentError) 

これはよくある問題です。

ここに何か不足していますか?

答えて

11

rspec 2.6以降、共有の例はグローバルです。サンプルグループで宣言できますが、そのグループにはスコープはありません。

+0

ありがとうございました。複数の仕様ファイルで共有サンプルを使用する方法に関する推奨事項はありますか? 'describe'ブロックの外で' shared_examples_for'を呼び出すと 'rake'が失敗するようです。 –

+0

申し訳ありません。それは真実ではない。私はそれを 'describe'でラップしても失敗します。どうやらそれは別のファイルを必要とすることと関係がある。 –

+4

目的は1つのファイルでそれらを定義し、それをn個の他のファイルで使用することです。規約はspec/support(spec/support/shared_examples_for_xyz.rbなど)の下にファイルに保存し、spec/spec_helper.rbからそれらのファイルを要求することです。 –

2

そこには、これを処理する最善の方法の公式ドキュメントのいくつかのヒントがあります:

https://www.relishapp.com/rspec/rspec-core/docs/example-groups/shared-examples

TLは、DR

はい、共有例はグローバルです。 Ruby On Railsのベストプラクティス:spec/support/foo_bar_shared_examples.rbに共有サンプルを配置し、describeブロックなどでラップすることなく、shared_exampleをそのまま書くことができます。

関連する問題