#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 модуля прозрачным.