Для приложения для обмена сообщениями у нас есть довольно длинные интеграционные тесты. Прямо сейчас, чтобы выполнить заданный сценарий, необходимо выполнить около 20 или 30 шагов в определенной последовательности, потому что шаг N отвечает на данные, созданные на шаге N-1.
Таким образом, в настоящее время они организованы в рамках одного примера «это ... делать»:
describe WidgetController do
describe "long opt-in opt-out scenario" do
it "can complete the full sequence" do
# create an account factory with trait account_type
# create manager factory for the account
# 5 people factories opt-in to that account
# 1 person then opts out
# a manager creates and sends a broadcast
# the one opt-out does not get the message
# the four opt-ins get the message
# verify the format of the message
Каждый шаг имеет одно или два утверждения для проверки правильности выполнения шага. Итак, в настоящее время у нас есть более 40 утверждений в одном примере it...do
, который полностью скрывает то, что на самом деле тестируется.
Мы могли вставлять оператор puts
на каждый шаг, чтобы передать описание на выходе, но, безусловно, было бы лучше, если бы наши N шагов можно было обрабатывать как N примеров rspec.
Есть ли способ организовать N последовательных шагов интеграционного теста в виде N отдельных it...do
примеров, чтобы (а) они выполнялись последовательно, и (б) состояние сохранялось между шагами, и (в) (в идеале) мы могли продолжать использовать случайное заполнение порядок других тестов, которые мы проводим?