NestJS Global Modules в тестах - PullRequest
2 голосов
/ 15 марта 2019

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

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

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

1 Ответ

2 голосов
/ 15 марта 2019

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

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

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

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

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

...