В моем приложении Rails, я использовал следующий JQuery, чтобы отключить возможность представить форму, нажав кнопку «войти» в поле ввода:Rails/Capybara- тест, что форма не представляет
$('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, который я создаю.
Любые идеи о том, как я могу надежно проверить, что форма не была отправлена?
Форма отправляется через AJAX, когда вы нажимаете кнопку «Сохранить», но это не то, что я тестирую здесь. Здесь я хочу протестировать _absence_ AJAX (или что-то еще). Я также использовал стратегию, аналогичную вашему первому предложению, путем вызова AJAX только для того, чтобы что-то на странице было обновлено. Но это все еще не говорило мне, что другое действие AJAX - отправка формы - не было сделано, возможно, например, после завершения первого вызова AJAX.Я ищу верный способ узнать, что сервер не получает запрос POST, независимо от того, что еще происходит. – grandinero