РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
⊗jsnsSpTeEq 141 of 201 menu
◀ ▶

Запрос в сквозном тесте в Nest

Клиент присылает JSON при создании записи, и важно не только открыть адрес, но и вернуть то же содержимое или подтверждение. Проверка одного кода ответа не ловит ошибку в теле или в заголовке типа.

supertest цепочкой задаёт тип запроса, путь, заголовок и тело, затем сравнивает статус и текст ответа. Приложение по-прежнему собирают через createTestingModule и createNestApplication, чтобы маршрутизация была настоящей.

Покажем на примере постов:

import { Body, Controller, Post } from '@nestjs/common'; import { PostService } from './post.service.js'; @Controller('posts') export class PostController { postService: PostService; constructor(postService: PostService) { this.postService = postService; } @Post() createPost(@Body() body: { title: string }) { return this.postService.createPost(body.title); } }
import { Injectable } from '@nestjs/common'; @Injectable() export class PostService { createPost(title: string) { return { title }; } }

Корневой модуль регистрирует оба класса:

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 {}

Сценарий шлёт JSON и сверяет тело:

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('Post create (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('POST /posts with body', async () => { await request(app.getHttpServer()) .post('/posts') .send({ title: 'Morning note' }) .set('Content-Type', 'application/json') .expect(201) .expect({ title: 'Morning note' }); }); });

Запуск:

npx vitest run test/post-create.e2e.spec.ts

Добавьте создание работника по адресу с JSON телом и проверьте в сквозном сценарии, что ответ содержит переданное имя.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить