2017-02-22 6 views
10

Легче разместить тестовые файлы рядом с исходными файлами, которые они тестируют (в том же каталоге 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, w Я заставил меня переосмыслить все это.

+3

Во-первых, на основе DRY опция 2 помогает нам не делать 2 изменения, если есть какие-либо изменения имени каталога. Во-вторых, Лично мне нравится вариант 2, потому что для TDD намного проще. –

+0

@DavidGuan Это имеет смысл, но в некотором смысле это делает код менее «организованным». Я чувствую, что именование каталогов не будет проблемой, если есть какая-то оснастка для зеркальной структуры каталогов. – UghSegment

+0

Я бы сказал, что вариант 1, хотя вы в конечном итоге повторяете себя, делает ваши сборки проще и быстрее, поскольку вы можете просто игнорировать одну папку вместо проверки каждого файла, но это может быть только миллисекунды. Я не думаю, что это имеет огромное значение, поэтому просто пойдите с тем, что, по вашему мнению, лучше всего работает с вами. – George

ответ

2

Моя личная рекомендация - пойти с №1. Причины таковы:

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

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

+3

Я должен не согласиться здесь: даже сам проект Angular 2 настраивается таким образом. Тесты не «загрязняют» ваш код. Тесты - это ваш код. Единичные тесты для отдельных компонентов полезны, и вместо того, чтобы хранить зеркало вашего основного каталога кодов исключительно для тестов, вы можете найти те тесты, которые вы ищете там, где вы ожидаете. – Askanison4

+0

Мы говорим о разных вещах. Мне бы очень хотелось, чтобы я не вошел в войну, какой подход «тот», поэтому мой ответ начинается с «Мои личные рекомендации». Что касается углового2 - просто взяв первую папку из своего репозитория git: https://github.com/angular/angular/tree/master/modules/%40angular/animation, мы видим четкое разделение тестов и кода sorce на две различные вложенные папки , И то же самое для каждого «модуля». – Amid

+0

Это справедливая точка. Я не заметил, что сам проект Angular отличается от проекта CLI. Интересно, в чем причина. Я согласен с тем, что это в основном основано на мнениях, но OP упомянул, что использует Angular-CLI, и придерживаться конвенций в этом отношении будет полезно в долгосрочной перспективе (с учетом обновлений и т. Д.). – Askanison4

7

Вариант # 2, как я пошел бы.

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

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

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

+0

Мой вопрос не является специфическим для Angular 2 вообще. – UghSegment

+0

В этом случае это, безусловно, просто предпочтение – Askanison4

+0

Упрощенный для _ "подумайте об модульных тестах как ЧАСТИ вашего кода" _ –

Смежные вопросы