Следует ли разместить тестовый файл в той же папке, что и исходный файл?

Легче ли размещать тестовые файлы рядом с исходными файлами, которые они тестируют (в том же каталоге src), или должен быть создан отдельный каталог tests с зеркальной иерархией?

Наличие в одной папке, похоже, облегчает жизнь, когда дело доходит до обслуживания, но также толпит исходные каталоги.

Вариант 1: Структура каталогов при наличии отдельных папок для источника и тестов:

- src
+-- item.ts
`-- util
    +-- helper.ts

- test
+-- item.test.ts
`-- util
    `-- helper.test.ts

Вариант 2: Структура каталога при наличии обоих типов файлов в одном каталоге:

- src
+-- item.ts
+-- item.test.ts
`-- util
    +-- helper.ts
    `-- helper.test.ts

Я всегда ходил с опцией 1, пока не пробовал angular-cli и не создавал файлы кода вместе с тестовыми файлами, как в варианте 2, что заставило меня переосмыслить все это.

Ответ 1

Вариант №2 - это то, как я пойду.

Когда вы думаете о компонентах Angular 2, я считаю их единственной сущностью, состоящей из нескольких файлов. Вы не перемещаете свои файлы HTML/CSS в какой-либо другой каталог, вдали от компонента, поэтому зачем переместить модульные тесты?

Я написал небольшой плагин для VSCode, который я лично считаю весьма полезным - он сжимает компонент Angular 2 в одну запись в представлении проводника и добавляет параметры значков/контекстного меню для перехода к шаблону /css/unit tests. Это помогает мне увидеть компонент как единое целое, состоящее из нескольких частей. Может быть, что-то подобное поможет сохранить ваш каталог "чистым", если об этом вас беспокоит?

Я бы посоветовал вам подумать об модульных тестах как ЧАСТИ вашего кода, а не в дополнение к. Они будут очень полезны, если вы сможете держать их сверху.

Ответ 2

Моя личная рекомендация - идти С# 1. Причины:

  1. Ваш исходный код не "загрязнен" кодом, не связанным с реальной бизнес-логикой. Имейте в виду, что нередко иметь более одного тестового файла для одного класса/модуля.
  2. Есть больше, чем просто модульные тесты, которые вы, вероятно, собираетесь написать. Как насчет e2e? Будут ли они размещены вдоль соответствующей "чего-то" стороны, поскольку они не так привязаны к конкретному файлу? Таким образом, вы рискуете в итоге загромождать свои тесты по всему проекту - некоторые из них в одном месте, а некоторые в другом. Разделение всех тестов в выделенном каталоге - решает эту проблему.
  3. Его легко подготовить к развертыванию проекта. В противном случае вам придется как-то удалить все тесты из переданных источников.

Не верьте мне в этом - взгляните на установленные проекты, такие как