Тест Nest JS - npm очень медленный с обработчиком beforeEach - PullRequest
0 голосов
/ 05 августа 2020

Я новичок в Nest JS и в настоящее время изучаю тестирование в Nest JS.

Это обычная проблема, когда наличие beforeEach с createTestingModule().compile() и некоторыми module.get() настолько увеличить выполнение теста?

У меня есть фиктивный тест expect(true), который занимает 6 секунд при наличии beforeEach, где он занимает всего 1 секунду без (и 1 секунду для этого фиктивного теста все еще кажется много) ... Это очень раздражает, когда вы запускаете тест в режиме часов, так как это занимает много времени, а у меня пока только небольшой тест.

Я не смог найти ничего, связанного с этим проблема с Nest JS, поэтому я, вероятно, что-то делаю не так, но я не мог понять, что.

Я пытался использовать некоторые шутливые флаги, такие как --runInBand или --maxWorkers=4, но безуспешно.

-

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

Вот мой tasks.service.spec.ts файл (это единственный тестовый файл, который у меня есть). Я могу предоставить репозиторий Github, если это поможет.

import { Test } from '@nestjs/testing';

import { TaskRepository } from './task.repository';
import { TasksService } from './tasks.service';

const mockTaskRepository = () => ({});

describe('tasks.service', () => {
  let tasksService;
  let taskRepository;

  beforeEach(async () => {
    const module = await Test.createTestingModule({
      providers: [
        TasksService,
        { provide: TaskRepository, useFactory: mockTaskRepository },
      ],
    }).compile();

    tasksService = await module.get(TasksService);
    taskRepository = await module.get(TaskRepository);
  });
  describe('Test', () => {
    it('pass', () => {
      expect(true);
    });
  });
});

Вот мои настройки шутки в package.json

  "jest": {
    "moduleFileExtensions": [
      "js",
      "json",
      "ts"
    ],
    "rootDir": "src",
    "testRegex": ".spec.ts$",
    "transform": {
      "^.+\\.(t|j)s$": "ts-jest"
    },
    "coverageDirectory": "../coverage",
    "testEnvironment": "node",
    "moduleNameMapper": {
      "^src/(.*)$": "<rootDir>/$1"
    }
  }

Вот результаты с комментариями beforeEach и без beforeEach прокомментировал

# With beforeEach

PASS  src/tasks/tasks.service.spec.ts (7.214 s)
  tasks.service
    Test
      ✓ pass (10 ms)

Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        7.241 s
Ran all test suites.

Watch Usage: Press w to show more.
# Without beforeEach

PASS  src/tasks/tasks.service.spec.ts
  tasks.service
    Test
      ✓ pass (2 ms)

Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        1.561 s, estimated 8 s
Ran all test suites.

Watch Usage: Press w to show more.

Любые подсказки или помощь приветствуются :-) Спасибо!

1 Ответ

0 голосов
/ 06 августа 2020

В новом проекте, добавляя команду времени для проверки общего времени, я получаю, что запуск beforeEach хука занимает от 2 до 10 миллисекунд. Весь набор тестов занял около 20 миллисекунд, и Jest сообщил, что тесты от начала до конца заняли 3,20 секунды. Во всяком случае, я бы сказал, что проблема на стороне Jest.

Рассматриваемые тесты, если вам интересно:

import { Test, TestingModule } from '@nestjs/testing';
import { BarService } from './bar.service';

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

  beforeAll(() => {
    console.time(BarService.name);
  });

  afterAll(() => {
    console.timeEnd(BarService.name);
  });

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

    service = module.get<BarService>(BarService);
    console.timeEnd('beforeEach');
  });

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

И вывод Jest:

$ jest bar.service
 PASS  src/bar/bar.service.spec.ts
  BarService
    ✓ should be defined (14 ms)
    ✓ expect true (3 ms)

  console.time
    beforeEach: 9 ms

      at Object.<anonymous> (bar/bar.service.spec.ts:22:13)

  console.time
    beforeEach: 2 ms

      at Object.<anonymous> (bar/bar.service.spec.ts:22:13)

  console.time
    BarService: 17 ms

      at Object.<anonymous> (bar/bar.service.spec.ts:12:13)

Test Suites: 1 passed, 1 total
Tests:       2 passed, 2 total
Snapshots:   0 total
Time:        2.554 s, estimated 3 s
Ran all test suites matching /bar.service/i.
Done in 3.20s.

Тесты проводились на следующей архитектуре:

Linux/linux x64 5.4.0-42-generic ~Intel(R) Core(TM) i3-8130U CPU @ 2.20GHz (cores/threads): 4

Вот ссылка на git репо . Я создал новый проект

nest new quick-test -p npm

Добавил console.time и console.timeEnd и запустил npm run test.

...