shimgo
3/12/2017 - 8:41 AM

capybara-webkitを使ったE2EテストでDBの変更件数確認テストがちゃんとDB更新されているのに失敗する

capybara-webkitを使ったE2EテストでDBの変更件数確認テストがちゃんとDB更新されているのに失敗する

以下のようなユーザを作成するテストを実行したところ、ちゃんとDBには新しいユーザが作成されているにもかかわらず変更件数0件とみなされて失敗していた。

scenario 'ユーザ作成', js: true do
  visit root_path
  expect {
    fill_in 'ユーザー名', with: 'user'
    click_button '作成'
  }.to change(User, :count).by(1)
end

これはボタンクリックからDBの更新前にUser.countを計測してしまうためで、click_buttonの後にレスポンスがあるまで待つようにするとテストはパスする。
このシナリオではjs: trueになっているためcapybara-webkitをドライバに使っていたが、JavaScriptは使用しない機能だったためjs: trueを削除したらレスポンスを待たなくてもテストがパスした。
おそらくJavaScriptが実行できない分標準のRack::Testの方が動作が早いためと推測される。