4

Rails 3.2アプリケーション用にRSpecテストを作成しましたが、ブラウザがポップアップするのに気が進まなかったため、Firefoxからに変更しようとしましたcapybara-webkit。この後も、1つを除いてすべてのテストが実行されます。失敗している行は次のとおりです。

expect { click_button "Create" }.to change(Answer, :count).by(count)

期待値を削除し、前後にスクリーンショットを撮るメソッドを追加すると、テストが正しく実行されていることがわかります。しかし、デバッガーを使用すると、2番目のスクリーンショット行の後にレコードが作成されることがログに示されます。次の行が実行された後、click_buttonと対応するControllerアクションが実行されるのを永遠に待つことができます。

「作成」ボタンは標準のhtmlボタンであり、JSは作成アクションに関与しません。sbには、この奇妙な振る舞いについての説明がありますか?

4

1 に答える 1

6

ここでは、Capybaraがクリックアクションをサーバーに送信することと、データベースをチェックするテストとの間に競合状態があります。

これを解決する最も簡単な方法は、チェックする前に待つことです。

expect { click_button "Create"; sleep 2 }.to change(Answer, :count).by(count)

私はこれが好きではありません。これをテストするためのより良い方法は、エンドユーザーの観点からチェックすることです。

たとえば、[作成]をクリックした後、ユーザーは回答ページに回答が表示されますか?

fill_in :title, :with => "My answer"

click_button 'Create'

page.should have_text "My answer"
于 2012-07-13T23:19:12.053 に答える