Сквозной тест в Nest
Сборка контейнера не гоняет HTTP, а клиент всё равно бьёт в реальный адрес. Один сломанный префикс или пропущенный модуль всплывёт только когда сервер слушает порт и маршрутизация включена.
Сквозной тест поднимает
INestApplication через
createNestApplication
и init, затем пакет
supertest шлёт запрос
на getHttpServer так же,
как браузер. Vitest описывает
сценарий, раннер его выполняет.
Покажем на примере постов:
npm install supertest
Корневой модуль со страницей списка:
import { Module } from '@nestjs/common';
import { PostController } from './post.controller.js';
import { PostService } from './post.service.js';
@Module({
controllers: [PostController],
providers: [PostService],
})
export class AppModule {}
import { Controller, Get } from '@nestjs/common';
import { PostService } from './post.service.js';
@Controller('posts')
export class PostController {
postService: PostService;
constructor(postService: PostService) {
this.postService = postService;
}
@Get()
getPosts(): string {
return this.postService.getPosts();
}
}
import { Injectable } from '@nestjs/common';
@Injectable()
export class PostService {
getPosts(): string {
return 'All posts';
}
}
Сценарий поднимает приложение и проверяет код ответа:
import { describe, it, beforeEach, afterEach } from 'vitest';
import { Test } from '@nestjs/testing';
import { INestApplication } from '@nestjs/common';
import request from 'supertest';
import { AppModule } from '../src/app.module.js';
describe('App (e2e)', () => {
let app: INestApplication;
beforeEach(async () => {
const moduleRef = await Test.createTestingModule({
imports: [AppModule],
}).compile();
app = moduleRef.createNestApplication();
await app.init();
});
afterEach(async () => {
await app.close();
});
it('GET /posts', async () => {
await request(app.getHttpServer())
.get('/posts')
.expect(200);
});
});
Запуск:
npx vitest run test/app.e2e.spec.ts
Поднимите приложение с
WorkerController
в сквозной проверке и добейтесь
успешного кода ответа на адресе
списка работников.