Слишком часто люди пишут тесты, которые не очищаются после себя, когда они воюют с состоянием. Часто это не имеет значения, поскольку объекты, как правило, срываются и воссоздаются для большинства тестов, но есть некоторые неудачные случаи, когда глобальное состояние объектов сохраняется и для всего тестового прогона, и когда вы запускаете тесты, которые зависят и изменяют что глобальное состояние в определенном порядке терпит неудачу.
Эти тесты и, возможно, реализации должны быть исправлены, но это боль, чтобы попытаться выяснить, что является причиной сбоя, когда тесты, которые влияют друг на друга, могут быть не единственными вещами в полном комплекте тестов. Это особенно сложно, когда изначально не ясно, что сбои зависят от порядка и могут прерываться с перерывами или на одной машине, но не в другой. Например:
rspec test1_spec.rb test2_spec.rb # failures in test2
rspec test2_spec.rb test1_spec.rb # no failures
В RSpec 1 были некоторые параметры (--reverse, --loadby) для заказа тестовых прогонов, но они исчезли в RSpec 2 и были минимально полезны при отладке этих проблем.
Я не уверен в том, что по умолчанию используется RSpec 1 или RSpec 2, но один специально разработанный тестовый набор, который я использовал в прошлом, произвольно заказывал тесты при каждом запуске, чтобы эти сбои освещались быстрее. На тестовом выходе семя, которое использовалось для определения порядка, было напечатано с результатами, чтобы было легко воспроизвести сбои, даже если вам пришлось выполнить некоторую работу, чтобы сузить отдельные тесты в пакете, который их вызывал. Затем были варианты, которые позволяли вам запускать и останавливаться в любом тестовом файле в порядке, что позволило вам легко выполнить двоичный поиск, чтобы найти тесты проблем.
Я не нашел таких утилит в RSpec, поэтому я спрашиваю здесь: Какими хорошими способами люди обнаружили для отладки этих типов ошибок, зависящих от порядка?