私は私のテストスイートの小さな悩みを持っている:私は、ページ上のチェックのAjaxのアクションスペックを実行すると、時々、私はこのエラーは(約1/100)非常に稀にしか示さないなぜカピバラの機能テストは待たないのですか?
Failure/Error: expect(page).to have_content 'DHH'
ランダムエラーを取得し、しかし、これは私を非常に混乱させました。私はこの「競争条件」の原因を決めた、と私は私のspec/rails_helper.rb
Capybara.default_max_wait_time = 10
にこの設定を追加しますが、これは私のために役に立たないで、と私は、タイムスタンプに
it 'adds new DHH', js: true do
find('#modal_new_dhh').click
fill_in('name', with: 'DHH')
p 'click button'
p Time.now.strftime('%H:%M:%S.%L')
click_button('Submit')
p 'checking content'
p Time.now.strftime('%H:%M:%S.%L')
expect(page).to have_content 'DHH'
p 'after checking content'
p Time.now.strftime('%H:%M:%S.%L')
end
を追加していることがわかり決めました
"click button"
"17:34:43.083"
"before checking content"
"17:34:43.127"
"after checking content"
"17:34:43.213"
なぜカピバラはクリックボタンを待たないのですか?
申し訳ありません、私の悪い英語
こんにちはTom! Btw、私はあなたがhttps://github.com/jnicklas/capybara/issues/1481とマークしたgithubで今の問題を読んでいます:) あなたは 'have_content'マッチャーがCapybara.default_max_wait_timeまで待つべきだと言うでしょうが、そうではありません私のために働く。私は質問を更新しました –
@vear素晴らしいことを実現する重要なことは、カピバラが待つことを知っていることを待つことだけであるということです。ボタンをクリックするように指示すると、ボタンをクリックする前にボタンが表示されるのを待っているので(クリックできるので)、そのボタンをクリックした結果は何も分からないので、何を待つべきか分かりません。 –
@vearあなたはそれが待っていないと思いますか?それはCapybara.deafult_max_wait_timeまで待っていますが、ページに「DHH」が表示されているときに早く戻ります。つまり、あなたのアプリが更新されたページを返すか、既に最初のページにあるコンテンツをチェックしています。ボタンをクリックしたアクションが終了した後にページにのみ表示されるコンテンツを確認する) –