在我的 Rails 应用程序中,我使用以下 jQuery 来禁用通过在输入字段中按“输入”来提交表单的功能:
$('input').on('keydown', function(e) {
if(e.which == '13') {
return false;
}
})
我想用 Capybara 测试这个,但不知道怎么做。例如:
# 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 内容之后。
关于如何可靠地测试表单未提交的任何想法?