Почему модульные тесты nestjs создают модуль тестирования в beforeEach вместо beforeAll?

#jestjs #nestjs

Вопрос:

В nestjs тестовый файл (шаблон из cli) имеет Test.createTestingModule внутреннюю beforeEach часть, поэтому он воссоздает модуль перед каждым тестом.

например, foo.service.spec.ts

 import { Test, TestingModule } from '@nestjs/testing';
import { FooService } from './foo.service';

describe('FooService', () => {
  let service: FooService;

  beforeEach(async () => {
    const module: TestingModule = await Test.createTestingModule({
      providers: [FooService],
    }).compile();

    service = module.get<FooService>(FooService);
  });

  it('should be defined', () => {
    expect(service).toBeDefined();
  });
});
 

Но почему это в beforeEach том, а не в beforeAll другом ?

Есть ли какая — то причина для этого beforeEach ? Может быть, это вызовет проблемы?

Я видел, что в тестах e2e приложение создается в beforeAll , поэтому я не уверен, зачем создается модульный тест beforeEach .

Ответ №1:

Я думаю, это потому, что вам обычно нужно создавать насмешки и шпионов, когда вы хотите выполнять модульные тесты, что неверно в тестах E2E, где вам нужны реальные подключения к базе данных и т. Д.

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

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