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

Подмена зависимости в Nest

Сервис тянет за собой базу, почту или внешний API, а проверке нужен нужна только одна строка ответа. Поднимать все связи ради одной строки долго и хрупко: сбой соседа ломает сценарий, который к нему не относится.

В записи провайдера вместо класса указывают useValue и передают готовый объект с нужными полями. Контейнер отдаёт его по тому же токену, что и живой сервис. Так отрезают соседние сервисы и базу от сценария, которому нужен только контракт токена.

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

import { Injectable } from '@nestjs/common'; @Injectable() export class PostService { getPosts(): string { return 'All posts'; } }

В тесте регистрируют заглушку с другой строкой и проверяют, что контейнер отдаёт именно её:

import { describe, it, expect } from 'vitest'; import { Test } from '@nestjs/testing'; import { PostService } from '../src/post.service.js'; describe('PostService mock', () => { it('uses stub value', async () => { const stub = { getPosts: () => 'Stub posts', }; const moduleRef = await Test.createTestingModule({ providers: [ { provide: PostService, useValue: stub }, ], }).compile(); const service = moduleRef.get(PostService); expect(service.getPosts()).toBe('Stub posts'); }); });

Запуск:

npx vitest run test/post.mock.spec.ts

Подмените WorkerService объектом с другой строкой списка в тестовом модуле и проверьте, что контейнер возвращает эту строку.

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