_免責事項:このリクエストは、特にCapybaraでJavaScript受け入れテストを行うことから生じています。 他の状況のユースケースを見ることができますが。_
私のアプリケーションはすべて、JSをオフにしても正常に動作するようにコーディングされていますが、JSをオンにすると、ユーザーエクスペリエンスをより快適にするための素晴らしいベルやホイッスルがたくさん表示されます。 このため、ユーザーの観点からは、ほとんどのものの相互作用は同じです。 ただし、JSなしとなしの両方で機能することをテストしたいと思います。
私がしたいのは、ある種のフラグを設定して、各フィルターセットで同じ仕様を2回実行するようにRSpecに指示することです。 何かのようなもの:
it 'does this same thing with and without JS enabled', :run_with => [{:js => true}, {:js => false}] do
# stuff here
end
私はこれが共有の例で達成できることを知っていますが、結果のコードはあまりエレガントではありません。
さらに、Firefox(Selenium)でJSを使用せずにJS(Rack test)を使用せずに、Webkit(capybara-webkit)でJSを使用せずに次のようにテストする場合に使用できます。
it 'does this same thing with and without JS enabled', :run_with => [{:js => false}, {:driver => :selenium}, {:driver => :webkit}] do
# stuff here
end
また、カスタムフィルターを使用してrun_with
オプションを指定する方法も想定しているため、次のようにそれほど冗長ではありません。
it 'does this same thing with and without JS enabled', :run_with_all_drivers => true do
# stuff here
end
考え? ドキュメントとコードを調べましたが、現在、フィルターを使用してこれを行う方法がわかりませんでした。
フィルタは、箱から出してこれを行うように実際に設計されているわけではありませんが、RSpecに変更を加えなくても、要求されている動作を取得することは難しくありません。
[true, false].each do |js|
it 'does this same thing with and without JS enabled', :run_with => {:js => js } do
# stuff here
end
end
これが必要な一般的なパターンである場合は、そのための小さなDSLメソッドを作成できます。
module WithAndWithoutJS
def with_and_without_js(&block)
[true, false].each do |js|
context "with :js => #{js}", :run_with => { :js => js } do
module_eval(&block)
end
end
end
RSpec.configure { |c| c.extend self }
end
次に、次のようにこのメソッドを使用できます。
describe "My integration spec" do
with_and_without_js do
it "does something with and without js" do
end
end
end
これはかなりエレガントだと思います。 フィルタがどのように機能してあなたが求めていることを実行するかを変更することは、かなり重要な変更であり、めったに使用されないと予想される機能のRSpecチームに将来のメンテナンスの負担を追加するため、私の本能はこれをコアに追加しないことです。
そうは言っても、この機能を提供するrspec-multi-filters
gemを作成したい場合は、お気軽に:)。
@myronmarstonいつものように、それはRSpecが何ができるかについての私の無知でした。 時間を割いて明確にしていただきありがとうございます。 これはうまくいくと思います。 :)
:+1:すごい
最も参考になるコメント
フィルタは、箱から出してこれを行うように実際に設計されているわけではありませんが、RSpecに変更を加えなくても、要求されている動作を取得することは難しくありません。
これが必要な一般的なパターンである場合は、そのための小さなDSLメソッドを作成できます。
次に、次のようにこのメソッドを使用できます。
これはかなりエレガントだと思います。 フィルタがどのように機能してあなたが求めていることを実行するかを変更することは、かなり重要な変更であり、めったに使用されないと予想される機能のRSpecチームに将来のメンテナンスの負担を追加するため、私の本能はこれをコアに追加しないことです。
そうは言っても、この機能を提供する
rspec-multi-filters
gemを作成したい場合は、お気軽に:)。