0

したがって、テストは約75%の時間がかかるようです。テストスイートは、ページが完全にロードされるのに十分な時間待機していないため、残りの25%は失敗します。私たちのローカルマシンでは、テストには35秒かかりますが、CircleCIのログではわずか5秒です。 (ローカルで私はBROWSER=chrome m path/to/test.fileでテストを実行します)CircleCIとMinitestを使用したフロントエンドテスト:テストがページをロードするのに十分な時間待たない

私はこのテクノロジースタックが初めてであるので、適切なリファレンスドキュメントであっても、どんな助けでも大歓迎です。

it 'should use this form' do 

    assert page.has_content?('#target_form') 
    within '#target_form' do 
    # fill in the form and apply payment 
    end 

    # it will throw errors here "can't find css..." 
    # the text/element won't even have loaded yet 
    # by the time the test is run 
    assert_equal '24', find_qa('price').text 
end 

答えて

1

、あなたの主張を書いている方法は、あなたのテストが失敗する可能性があります(CircleCIは、あなたの地元のボックスに比べて)とても遅く、ハードウェア上で実行されているカピバラの待機/再試行の動作を利用していません。 assert_equalはそれらを比較する2つのパラメータを評価し、完了です。これは良いことではありません。なぜなら、Capybaraはすべてのアクションが非同期アクションを実行できると仮定しているからです。ボタンクリックが送信する可能性のあるアクションを知る方法がないため、新しいページを送信して読み込むのを必ずしも待つ必要はありません。しかし、カピバラが提供したアサーションを使用する場合は、比較が真になるまで比較を待つ/ Capybara.default_max_wait_time秒まで再試行します。私はあなたのfind_qaメソッドが定義されているかどうかはわかりませんが、あなたはカスタム:qaセレクタを宣言した場合は、

assert_selector :qa, 'price', text: '24' 

ような何かを行うことができfind_qaだけのCSSセレクタをやっているなら、あなたは

assert_selector :css, "whatever find_qa('price') produces as a css selector", text: '24' 
を行うことができます

またはあなたがおそらく読みたいminitest使用しているので、あなたは

find_qa('price').assert_text('24') 

を行うことができます - https://github.com/teamcapybara/capybara#using-capybara-with-minitestを - とカピバラを設定しますアサーションの実行数が正しいので、カピバラの待機/再試行動作を利用するより具体的なアサーションを提供するように、最小限のマッチャを使用します。あなたは

assert_text find_qa('price'), '24' 
assert_xpath 'an XPath selector', ... 
assert_title ... 
assert_current_path ... 

などのように理解しやすいと深さの答えで用

+0

うわーおかげで物事を書くようになる追加マッチャ、ためhttps://github.com/teamcapybara/capybara/blob/master/lib/capybara/minitest.rbを参照してください、私はそれをだかなりsyreです。私はカピバラの援助者を試してみるつもりです。 –

+0

更新:トーマスの答えが問題の根源になっているようです。フロントエンドテストではこれが一般的な問題だと思いますので、後でそれをどのように長期的に更新するか試してみましょう。今のところ、テストはうまくいくように見えます。ありがとう、トーマスウォールポール! –

関連する問題