В настоящее время написание тестов для функции отслеживания времени приложения Rails. Я не могу понять способ имитации нажатия кнопки «play» на таймере, ожидания нескольких секунд, нажатия паузы и отправки формы (создание нового объекта Timestamp).Rails: как я могу проверить секундомер в моих тестах интеграции Capybara?
test "track time with stopwatch" do
visit new_project_timestamp_path(@project)
find('#play_button').click
sleep 4.0
find('#pause_button').click
click_button "submit_new_timestamp"
visit project_path(@project)
assert page.has_content? "4 seconds"
end
^Это суть того, что я хочу, чтобы это сделать, но спать, очевидно, не работает, потому что он полностью приостанавливает поток, в то время как я хочу испытание на своего рода «ждать» в то время как секундомер делает его вещь на несколько секунд. Вышеуказанный тест не выполняется, потому что на самом деле не отслеживается время; пауза нажата сразу после игры, в глазах таймера, и поэтому форма отправляется без фактического времени регистрации, что, конечно же, вызывает ошибку проверки.
Есть ли способ, которым я смогу симулировать ожидание несколько секунд без фактического приостановления потока?
Сообщения об ошибках в форме (и в тестовых журналах) показывают, что поле секунды в форме не заполнено. Это заполняется количеством секунд, отслеживаемых секундомером, после отправки с помощью jQuery, поэтому мой предполагалось бы, что это не выполняется должным образом или вообще (это прекрасно работает в процессе разработки и производства). Я постараюсь переключить драйверы, возможно, это решит проблему. Если нет, возможно, в коде jQuery есть ошибка, которая появляется только в тестовой среде. –
@BenLawton Как вы заполняете поля формы, обработчик JS click? Если вы используете JS-совместимый драйвер (драйвер драйвера стойки по умолчанию capybara не выполняет JS)? –
Первоначально использовал значение по умолчанию, но я просто попытался настроить 'Capybara.javascript_driver =: selenium' на отсутствие эффекта. –