2017-02-26 10 views
1

AJAX要求を待たない(。page.first( 'DIV#質問スコア')テキスト)を期待.TO EQ '-1' 私は睡眠1挿入カピバラは、私はRSpecの+カピバラ+ポルターガイストで次のエラーを取得する

expected: "-1" 
     got: "0" 

scenario 'can upvote just one time', js: true do 
    first('a#question-upvote').click 
    sleep 1 
    expect(first('div#question-score').text).to eq '1' 
    first('a#question-upvote').click 
    sleep 1 
    expect(first('div#question-score').text).to eq '1' 
end 

テストパスを。

ページが非同期リクエストを待っていないことを理解しました。 スリープ状態でうまく動作するようにテストを書き直すにはどうすればよいですか?

P.S.英語のために申し訳ありません。

答えて

3

eqマッチャーを使用して待機中の動作を強制終了しています。これは、見つかった要素の.textを呼び出すと文字列があり、eqマッチャーで使用したときにその文字列を再読み込み/再クエリする方法がないためです。待機/再試行の動作をしたい場合は、Capybaraによって提供されたマッチャーをCapybara要素で使用する必要があります。ページ全体が変化しているので、もしので、代わりexpect(first('div#question-score').text).to eq '1'のあなたは

expect(first('div#question-score')).to have_text('1', exact: true) # you could also use a Regexp instead of specifying exact: true 

注意する別のことをやるべき

は、要素のall/first無効リロードは、(または要素は、あなたは上のテキストを待っているされていることが完全に置き換えられている)、最初のページにセレクタと一致する要素がありましたが、実際には2番目のページ(または置き換えられた要素)の要素をチェックして、使用しないようにしてください。first/all - findを、css:first-child /:first-of-typeなどを使用してクエリで使用したいとします。typ複数の要素を返す代わりに要素を一意に識別するためのもの(または同等のXPath)ページ上で非同期に置き換えられる要素の値だけであれば、心配する必要はありません。

+0

ありがとうございます。あなたは私をもう一度助けました。 –

関連する問題