Поиск по сайту
Ctrl + K
Вопросы по Nest.js

Какие фреймворки для тестирования лучше всего подходят для NestJS?

NestJS — это мощный фреймворк для создания серверных приложений на Node.js, который использует TypeScript. Одной из важных частей любого проекта является тестирование. В этом ответе мы рассмотрим несколько популярных фреймворков для тестирования, которые хорошо работают с NestJS, а также предоставим примеры кода.

1. Jest

Jest — это популярный фреймворк для тестирования JavaScript, который очень хорошо интегрируется с NestJS. Он предоставляет удобный интерфейс и мощные функции, такие как мокирование и отслеживание вызовов.

Установка Jest

Для начала установим Jest и необходимые зависимости:

npm install --save-dev jest @nestjs/testing ts-jest @types/jest

Пример теста с Jest

Рассмотрим простой контроллер, который мы будем тестировать:

// src/app.controller.ts
import { Controller, Get } from '@nestjs/common';

@Controller('app')
export class AppController {
  @Get()
  getHello(): string {
    return 'Hello World!';
  }
}

Теперь создадим тест для этого контроллера:

// src/app.controller.spec.ts
import { Test, TestingModule } from '@nestjs/testing';
import { AppController } from './app.controller';

describe('AppController', () => {
  let appController: AppController;

  beforeAll(async () => {
    const module: TestingModule = await Test.createTestingModule({
      controllers: [AppController],
    }).compile();

    appController = module.get<AppController>(AppController);
  });

  it('should return "Hello World!"', () => {
    expect(appController.getHello()).toBe('Hello World!');
  });
});

2. Supertest

Supertest — это библиотека, которая позволяет тестировать HTTP-запросы в приложениях на Node.js. Она отлично подходит для тестирования RESTful API, созданных с использованием NestJS.

Установка Supertest

Установите Supertest:

npm install --save-dev supertest

Пример теста с Supertest

Добавим тесты для контроллера, используя Supertest:

// src/app.controller.spec.ts
import { Test, TestingModule } from '@nestjs/testing';
import { AppController } from './app.controller';
import { INestApplication } from '@nestjs/common';
import * as request from 'supertest';

describe('AppController (e2e)', () => {
  let app: INestApplication;

  beforeAll(async () => {
    const moduleFixture: TestingModule = await Test.createTestingModule({
      controllers: [AppController],
    }).compile();

    app = moduleFixture.createNestApplication();
    await app.init();
  });

  it('/app (GET)', () => {
    return request(app.getHttpServer())
      .get('/app')
      .expect(200)
      .expect('Hello World!');
  });

  afterAll(async () => {
    await app.close();
  });
});

3. Mocha & Chai

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

Установка Mocha и Chai

npm install --save-dev mocha chai @types/mocha @types/chai

Пример теста с Mocha и Chai

Создадим пример теста с использованием Mocha и Chai:

// src/app.controller.spec.ts
import { expect } from 'chai';
import { AppController } from './app.controller';

describe('AppController', () => {
  let appController: AppController;

  before(() => {
    appController = new AppController();
  });

  it('should return "Hello World!"', () => {
    expect(appController.getHello()).to.equal('Hello World!');
  });
});

Заключение

NestJS отлично поддерживает различные фреймворки для тестирования, каждый из которых имеет свои особенности и преимущества. Jest является наиболее популярным выбором благодаря своей простоте использования и мощным функциям. Supertest хорошо подходит для тестирования API, а Mocha и Chai предоставляют гибкость для тех, кто предпочитает другие подходы. Выбор фреймворка зависит от ваших предпочтений и требований проекта.

Содержание:
Редактировать