Вы не упоминаете, над какими командами он висит, но я собираюсь догадаться, что это ваш wait_for_ajax
метод. Если это так, то это потому, что вы используете Timeout.timeout
, который является наиболее опасным для использования методом, предоставляемым Ruby. Это работает путем запуска второго потока, который будет вызывать исключение в исходном потоке по истечении времени ожидания. Проблема в том, что исключение может возникнуть в любом месте исходного потока, что означает, что если блок внутри вызова timeout
делает что-то нетривиальное, он может оказаться в полностью невосстановимом состоянии (сетевые соединения и т. Д.). В принципе, Timeout.timeout
может быть безопасно использован только с ОЧЕНЬ детальным знанием каждой мелочи, происходящей в его блоке, что означает, что его эффективно никогда не следует использовать ни при каких вызовах в стороннюю библиотеку. Вместо этого вы должны просто использовать таймер и спать, если вам нужно время ожидания. Что-то вроде
def wait_for_ajax
start = Time.now
until page.evaluate_script('jQuery.active').zero? && page.has_no_css?(".k-loading-color", wait: false) do
sleep 0.1
raise <Some Error> if (Time.now - start) > Capybara.default_max_wait_time
end
end
Как говорится, вам действительно не нужно wait_for_ajax
с удобным интерфейсом и правильно написанными тестами.
Кроме того, включив capybara/rspec
, вы уже настроили для вызова reset_sessions
после каждого теста и для включения Capybara::DSL
в типы тестов, которые должны быть включены в - https://github.com/teamcapybara/capybara/blob/master/lib/capybara/rspec.rb#L9 - поэтому, добавляя свой собственный блок after
, вы просто заканчиваете тем, что вызываете reset_sessions
дважды после каждого теста, который является пустой тратой времени.