0

私の 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.countActiveRecord が新しいレコードをデータベースに保存する前に計算するためです。

また、jQuery 関数でカスタム$.get()リクエストを実行するようにしてみました。これにより、サーバー側のすべての作業を完了するのに十分な時間がかかると考えて、コントローラーが単純なテキストで応答します。しかし、これはまだ機能しません.jQuery関数をどのように設定しても、フォームの送信と新しいレコードの保存は、私が構築したAJAXの後に常に発生するためだと思います.

フォームが送信されなかったことを確実にテストする方法についてのアイデアはありますか?

4

2 に答える 2

0

カピバラにページを再訪問させてから確認することで動作するようになりましたShift.count。jQuery 関数がコメント アウトされている場合、テストは失敗し、関数のコメントが解除されている場合はパスします。それでも良い方法があれば知りたいです。

于 2013-09-05T19:33:36.080 に答える