Глобальные модули NestJS в тестах

#javascript #node.js #typescript #nestjs

#javascript #node.js #typescript #nestjs

Вопрос:

Есть ли способ автоматически предоставлять все @Global модули в TestModule ? (т.е. без необходимости их импорта, так же, как работает основное приложение)

До сих пор мне приходилось вставлять какие-либо глобальные модули в import список моего вызова:

 await Test.createTestingModule({
      imports: [
        GlobalModule1,
        GlobalModule2
  

Ответ №1:

Глобальные модули всегда должны быть импортированы один раз, чтобы их поставщики были доступны глобально. Это справедливо для тестов и основного приложения, см. документы.

Глобальные модули должны быть зарегистрированы только один раз, в лучшем случае корневым или основным модулем. После этого CatsService поставщик будет повсеместным, хотя CatsModule и не будет импортирован.

Таким образом, нет никакого способа их импортировать. Вы можете упростить задачу, создав CommonsModule который импортирует все ваши глобальные модули. Затем вы можете импортировать CommonsModule вместо каждого модуля в свой AppModule и в свои тесты.

Обратите внимание, однако, что наличие большого количества глобальных зависимостей — это запах кода. Кроме того, в модульных тестах вы обычно хотите протестировать класс изолированно от любых других зависимостей. Если вы импортируете глобальные модули, вы будете тестировать на реальных поставщиках.

Делать все глобальным — не самое удачное решение. Глобальные модули доступны для уменьшения объема необходимого шаблона. Массив импорта по-прежнему является лучшим способом сделать API модуля прозрачным.