2012-03-25 3 views
0

私はセレンドライバでのRails 3.2.2、キュウリレール-1.3.0、RSpecのレール-2.8.1とカピバラ-1.1.2上でのRubyを使用しています。私はJavaScriptのシナリオを実行する際の並行性について問題があります(私のケースは並行性の問題に関係していると思われます)。私は私のステップ定義.rbファイルで@javascriptシナリオを実行して並行性の問題を回避する方法は?

Feature: ... 
    ... 

    @javascript 
    Scenario: ... 
    Given ... 
    When I log out 
    Then I should be redirected to the home page 

::私は私の.featureファイルで

Then /^I should be redirected to the home page$/ do 
    current_path.should == root_path 
end 

私がテストを実行するので、ターミナルウィンドウでcucumberコマンドラインを実行し、このエラーが表示されます:

$ cucumber 
Using the default profile... 

Feature: ... 
    ... 

    @javascript 
    Scenario: ... 
    ... 
    When I log out 
    Then I should be redirected to the home page 
     expected: "/" 
     got: "/user" (using ==) (RSpec::Expectations::ExpectationNotMetError) 
     ... 

ただし、すべてのテストに合格:私のステップ定義.rbファイルで、私は

Then /^I should be redirected to the home page$/ do 
    sleep(1) 

    current_path.should == root_path 
end 

を使用する場合には、期待通りに動作します。

ので、問題が解決しているように見える場合でも、私の問題を処理するための良い方法はありますか?もしそうなら、「正しい」/「よく使われる」ソリューション(おそらくCapybara APIをいくつか使用しています)

答えて

1

それは同時実行ではありません。問題は、キュウリがあなたのアプリケーションと同期していないことです。テスト側は、あなたのアクションが実行を完了したかどうかについて何も知らない。したがって、パスをアサートしているときに、アプリケーションは実際にリダイレクトするレスポンスを生成しませんでした。

あなたは要素のためにそれをポーリングが表示されていることがわかりますカピバラに見ていきます場合。 (ガード最大待ち時間)。したがって、同じアプローチを取ってしばらくの間ポーリングを行うか、パスのテストを行う前にテストで怠け者のアプローチをとって、ターゲットページのいくつかのコンテンツが表示されるかどうかを確認するステップを追加することができます。カピバラの仕組みに頼ることができます。 ** [カピバラの公式ドキュメント](https://github.com/jnicklas/capybara)で

+0

** "**ドライバ>>セレン**" セクションで、それは[...] *」と言いますこの動作を有効にするには、:resynchronize driverオプションをtrueに設定します。[...] * "、しかし、(あなたがそれを参照している場合は、あなたは「問題はキュウリがあなたのアプリケーションと同期していないということです」と言う)私は ':resynchronize'ドライバオプションをどのように設定するのかを理解していませんでした。 *注*:私が質問で報告したコードでは、JavaScriptのリダイレクトをテストしています。 – Backo

関連する問題