Какие фреймворки для тестирования лучше всего подходят для 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 предоставляют гибкость для тех, кто предпочитает другие подходы. Выбор фреймворка зависит от ваших предпочтений и требований проекта.