2016-04-15 11 views
0

Qt5にアップグレードした後、私の以前に合格した仕様のいくつかが失敗し始めました。いくつかの失敗は、信頼できない発信要求に関連しています。たとえば、仕様では、10回のリクエストが行われたかどうかをチェックしていましたが、仕様がn回のリクエストで失敗し、nが2〜3回、またはそれ以外が不確実でした。私はカピバラのデフォルトの待ち時間を変更しようとしましたが、運はありません。capybara-webkitのQt5にアップグレードした後のRSpecビューのスペックエラー

さらに簡単な障害があります。

it 'shows sorting with correct link', js: true do 
    expect(page).to have_content(/Sorted by/i) 
    expect(page).to have_selector(:link_or_button, text: /Most Recent/i) 
    page.find(:link_or_button, text: /A-Z/i).click 
    expect(current_url).to include 'sort=name' 
end 

そして、それは私に失敗しました:URLはリンクをクリックした後に変更した場合はチェックしています

Failure/Error: expect(current_url).to include 'sort=name' 
    expected "http://127.0.0.1:51355/shows" to include "sort=name" 

を私はカピバラ、WebKitのデバッグ・モードをオンにし、それが実際にはなかったようにそれが見えました新しいURLへの応答を記述します。

(... previous logs ignored...) 

Received "Node.leftClick" 
Started "Node.leftClick" 
Started request to "http://127.0.0.1:51355/shows?sort=name&status=" 
Finished "Node.leftClick" with response "Success()" 
Wrote response true "" 
Received "CurrentUrl()" 
Started "CurrentUrl()" 
Finished "CurrentUrl()" with response "Success(http://127.0.0.1:51355/shows)" 
Wrote response true "http://127.0.0.1:51355/shows" 
Received 200 from "http://127.0.0.1:51355/shows?sort=name&status=" 
Received "Reset()" 
Started "Reset()" 
Finished "Reset()" with response "Success()" 
Wrote response true "" 
Received "EnableLogging()" 
Started "EnableLogging()" 
Finished "EnableLogging()" with response "Success()" 
Wrote response true "" 
Received "SetUnknownUrlMode(block)" 
Started "SetUnknownUrlMode(block)" 
Finished "SetUnknownUrlMode(block)" with response "Success()" 
Wrote response true "" 
Received "SetTimeout(300)" 
Started "SetTimeout(300)" 
Finished "SetTimeout(300)" with response "Success()" 
Wrote response true "" 
     shows sorting with correct link (FAILED - 1) 

誰もが同様の失敗を経験したか、どのように私はこの問題をさらに調査することができた場合、私は疑問に思います。仕様はQt4で構築されたcapybara-webkitを使っていましたが、なぜQt5で失敗したのかはわかりません。私の設定の詳細:

capybara (2.7.0) 
capybara-webkit (1.10.1) 
rails (4.2.5.1) 
rspec (3.3) 

ありがとう!

答えて

1

Capybaraを使用しているときに動作が同期しているとは限りません。つまり、少し待ってから再試行するCapybaraが提供するマッチャを使用する必要があります。あなたの「リクエスト数」について

expect(page).to have_current_path(/sort=name/) 

のように記述する必要がありますあなたのexpect(current_url).to include 'sort=name'例の場合、スペック、私たちはコードを参照してくださいする必要があると思います。

+0

はい!ありがとう! Capybara matcherを使用してこの仕様を解決しました。 「要求数」仕様に関しては、capybara-webkitが[キャッシュ要求](https://github.com/thoughtbot/capybara-webkit/issues/724)となっていると思います。 URLにランダムなクエリ文字列を追加すると、期待どおりに動作します。どのように私はこのthoに対処するか、またはブラウザのキャッシュを無効にするかわからない。私は確かに実際のコードを変更したくないのです。あなたにはどんな考えがありますか? – 322896

+0

@ 322896申し訳ありません - ランダムなクエリ文字列以外の解決方法は、テストモードでのみ追加されていますが、実際に数多くのリクエストを本番環境で作成する必要がある場合は、とにかくキャッシュを破棄する必要があります。 –

+0

よろしくお願いいたします。たぶん私は仕様をより現実的にするか、その周りに道を譲らなければなりません。 – 322896

関連する問題