私の Rails アプリでは、次の jQuery を使用して、入力フィールドで「Enter」を押してフォームを送信する機能を無効にしました。
$('input').on('keydown', function(e) {
if(e.which == '13') {
return false;
}
})
これをカピバラでテストしたかったのですが、方法がわかりません。例えば:
# the form being tested creates a new Shift object:
test "enter does not submit form" do
shift_count = Shift.count
# fill in form, etc...
page.driver.browser.execute_script "var e = jQuery.Event('keydown'); e.which = 13; $('#shift_employee').trigger( e );"
assert Shift.count == shift_count
end
このテストは、jQuery 関数がコメント アウトされている場合でもパスします。おそらく、Shift.count
ActiveRecord が新しいレコードをデータベースに保存する前に計算するためです。
また、jQuery 関数でカスタム$.get()
リクエストを実行するようにしてみました。これにより、サーバー側のすべての作業を完了するのに十分な時間がかかると考えて、コントローラーが単純なテキストで応答します。しかし、これはまだ機能しません.jQuery関数をどのように設定しても、フォームの送信と新しいレコードの保存は、私が構築したAJAXの後に常に発生するためだと思います.
フォームが送信されなかったことを確実にテストする方法についてのアイデアはありますか?