При обновлении приложения среднего размера с Rails 5.1 до 6.0.2.2 (+ Ruby 2.6.1 -> 2.6.3) я начинаю получать нестабильные тесты во всех видах тестов. Покрытие 90%, 500 сотен тестов и от 0 до 8 неудачных тестов, абсолютно случайные. После долгой охоты на ошибки я заметил, что у меня все работает со 100% уверенностью, если я пропущу все тесты, связанные с Websocket.
Обычно это то, что я должен тестировать и как я это делаю (Minitest / Spe c синтаксис):
class Api::PlayersControllerTest < ActionController::TestCase
before do
@user = users(:admin)
sign_in @user
end
it "broadcasts stop to user's player" do
put :update, format: :json, params: {id: @user.id}
assert_broadcast_on("PlayersChannel_#{@user.id}", action: "stop")
end
end
Обратите внимание, что это не "интеграционный тест", потому что мы используем сырой вызов API. Что я должен проверить: если какой-то запрос поступает на какой-либо контроллер, ActionCable передает сообщение Websocket. Вот почему я должен использовать помощник Devise sign_in в тесте контроллера.
- ActionCable поддерживается Redis во всех средах.
- Я не использую Параллельное тестирование.
- Набор данных использует фикстуры, а не фабрики.
- use_transactional_tests имеет значение true
У меня 23 подобных теста, и все они без проблем проходили с использованием Rails 5.1. Начинаются один за другим с использованием фокуса, они также проходят 100% как в Rails 5, так и в 6. Проблема заключается в том, что при выполнении всего набора тестов у меня начинают появляться ошибки во всех разделах (включая тесты модулей / моделей), в основном связанных с согласованность набора данных. На самом деле, похоже, что приборы не (или плохо) перезагружаются.
Есть идеи? Что-то не так с тем, что я делаю, или вы думаете, что это проблема с Rails 6?