3

カピバラを使用して、rspec で JavaScript アラートをテストします。どうして

expect{
  click_link "Cancel my account"
  page.driver.browser.switch_to.alert.accept
}.to change(User, :count).by(-1)

失敗します。まだ

puts User.count
expect{
  click_link "Cancel my account"
  page.driver.browser.switch_to.alert.accept
  puts User.count
}.to change(User, :count).by(-1)

しませんでしたか?テストを修正するにはどうすればよいですか? reloadの機能はありませんUser

4

1 に答える 1

6

JavaScript仕様を使用しているため、ブラウザ/ JSはテストとは異なるプロセスで実行されており、受け入れた後にカピバラコマンドを発行していないため、カピバラはブラウザリクエストが完了するまで待機することを知りません。アラート。puts実際のデータベースが変更されるのに十分な時間遅延が追加されると思います。次のページの読み込みが開始される (データベースが更新される) まで Capybara が戻るのを待ちたい場合は、ブロックの最後で次のようにすることができます。

page.find('head').
于 2013-03-03T21:54:52.667 に答える