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の方が動作が早いためと推測される。