Модули NestJS Global в тестах

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

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

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

person Luiz Henrique Martins Lins Rol    schedule 15.03.2019    source источник


Ответы (1)


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

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

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

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

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

person Kim Kern    schedule 15.03.2019