Как я могу написать тесты javascript, которые не тайм-аут или случайный случай с rspec, capybara и poltergeist?

У меня были проблемы с отключением тестов и случайным сбоем. Я искал практические примеры того, как писать надежные тесты интеграции capybara, но я не нашел ничего полезного.

С тех пор, как мы начали писать кучу тестов, наш CI-сервер случайно провалился, что делает наше приложение неустойчивым, но тесты всегда (в основном) проходят локально.

Я хочу узнать, как вы и другие опытные гуру BDD/TDD:

  • Как работать с внешним javascript и т.д. (KissMetrics, Google Analytics и т.д.) и
  • Отладка и предотвращение ошибок таймаута, которые нарушают сборку

Любая помощь будет оценена.

Ответы

Ответ 1

Чтобы следить за этим. Я оценил приглашение @jonleighton, чтобы указать ошибку на полтергейсте, но проблемы, с которыми я столкнулся, были связаны с двумя отдельными проблемами:

  • Плохие/неправильные утверждения capybara, которые будут тайм-аут, потому что я не выполнял предложения, четко изложенные в этот пост
  • Сторонние javascripts и многое другое. В основном у меня были сторонние javascripts, такие как kissmetrics, аналитика google и даже интерактивный чат, который будет загружаться каждый раз, когда тест был неправильным, я устранил это из-за происходящего, и мои тесты ускорились и выглядели более стабильными/последовательными.

Ответ 2

Я обнаружил, что во многих случаях я могу помочь своим интеграционным тестам быть более детерминированными, воспользовавшись функцией черного списка Poltergeist. В моем случае у меня есть имена в узлах с черным списком, как показано ниже.

typekit.net
facebook.net
facebook.com
google.com
google-analytics.com
...

Идея состоит в том, чтобы отключить все, что a) на самом деле не требуется для тестирования, и b) может повлиять на завершение загрузки страницы в среде CI. Я заметил, что это очень помогает. Кроме того, использование этой опции PhantomJS с помощью Poltergeist также помогает:

phantomjs_options: ['--ignore-ssl-errors=yes']