Первый тест выглядит читаемым, но всё важное скрыто: что на самом деле создаёт
makeIncompleteProfile()? Какие поля пусты? Что настраивает makeImportService()? Чему должен соответствовать замокированный lookup?Если классы или модели должны быть в определённом состоянии для группы тестов, читателю гораздо легче понять, как создаётся объект, через фабрики и фейки, а не через уникальные вынесенные функции, разбросанные по каждому тесту.
Это, конечно, приводит к дублированию логики подготовки в каждом тесте (виден компромисс), но читать каждый тест по отдельности значительно проще, потому что весь его контекст изолирован — не нужно выходить за пределы теста в несколько мест, чтобы полностью понять, как всё настроено.
Хочу также обратить внимание на границы скриншотов (они намеренные). Они показывают, сколько контекста можно реально охватить за раз при чтении одного теста.
Когда подготовка спрятана за хелперами, тест может выглядеть чище, но читателю приходится выходить за пределы видимой области, чтобы понять состояние, которое проверяется, а затем возвращаться обратно в тест, иногда по нескольку раз.
Это разрушает ясность, которая была бы, если бы нужно было просто скроллить по вертикали, как при чтении книги.
@WebDev_Plus

