2016-06-30 8 views
0

私は私のテストスイートの小さな悩みを持っている:私は、ページ上のチェックの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" 

なぜカピバラはクリックボタンを待たないのですか?

申し訳ありません、私の悪い英語

答えて

2

あなたの例のwaitはhave_content matcherで発生します。 click_buttonは何も待たずにボタンをクリックして移動するだけです(ボタンが何かをクリックすると何ができるのかわからないため) has_content matcherは、コンテンツが表示されるようにCapybara.default_max_wait_timeまで待機します。

あなたfind、「FILL_IN」に注意してclick_button電話も答えを

+0

こんにちはTom! Btw、私はあなたがhttps://github.com/jnicklas/capybara/issues/1481とマークしたgithubで今の問題を読んでいます:) あなたは 'have_content'マッチャーがCapybara.default_max_wait_timeまで待つべきだと言うでしょうが、そうではありません私のために働く。私は質問を更新しました –

+0

@vear素晴らしいことを実現する重要なことは、カピバラが待つことを知っていることを待つことだけであるということです。ボタンをクリックするように指示すると、ボタンをクリックする前にボタンが表示されるのを待っているので(クリックできるので)、そのボタンをクリックした結果は何も分からないので、何を待つべきか分かりません。 –

+0

@vearあなたはそれが待っていないと思いますか?それはCapybara.deafult_max_wait_timeまで待っていますが、ページに「DHH」が表示されているときに早く戻ります。つまり、あなたのアプリが更新されたページを返すか、既に最初のページにあるコンテンツをチェックしています。ボタンをクリックしたアクションが終了した後にページにのみ表示されるコンテンツを確認する) –

0

これは競合状態です。なぜそれが起こったかについては、私は実際に言うことができません。私は、コンピュータが非常に高速であるため、ユーザーエクスペリエンスと自動テストとの間に違いがあると考えることができる唯一の理由があります。

私はいつか同じ問題に直面していましたが、私はthis tutorialを見つけました。私はこれらの問題を解決する方法を教えてくれました。それがあなたにとっても役立つことを願っています。

+0

おかげで彼らの行動を実行する前に表示されるように、関連する要素を待って、私は前にそれを使用しますが、私が知りたい - カピバラは後に待ってはいけない理由クリックボタン –

+1

@vearボタンをクリックすると何か(何もしない)ができるので、何を待つべきかを知る方法がないので、何かを見つけるためにあなたがそれを言うとき、カピバラは待つ。 –

+0

@TomWalpoleは、ありがとう! –

関連する問題