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

Подмена базы в Nest

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

Токен репозитория для сущности берут через getRepositoryToken из @nestjs/typeorm. В провайдерах тестового модуля передают useValue с объектом, у которого те же операции, что нужны сервису. Сервис получает заглушку и не открывает соединение.

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

import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm'; @Entity() export class Post { @PrimaryGeneratedColumn() id: number; @Column() title: string; }

Сервис читает список через репозиторий:

import { Injectable } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { Post } from './post.entity.js'; @Injectable() export class PostService { postRepository: Repository<Post>; constructor( @InjectRepository(Post) postRepository: Repository<Post>, ) { this.postRepository = postRepository; } async findAll() { return this.postRepository.find(); } }

Заглушка репозитория и проверка сервиса:

import { describe, it, expect } from 'vitest'; import { Test } from '@nestjs/testing'; import { getRepositoryToken } from '@nestjs/typeorm'; import { PostService } from '../src/post.service.js'; import { Post } from '../src/post.entity.js'; describe('PostService with mock repository', () => { it('returns rows from stub', async () => { const stub = { find: async () => [{ id: 1, title: 'Morning note' }], }; const moduleRef = await Test.createTestingModule({ providers: [ PostService, { provide: getRepositoryToken(Post), useValue: stub }, ], }).compile(); const service = moduleRef.get(PostService); const rows = await service.findAll(); expect(rows).toEqual([{ id: 1, title: 'Morning note' }]); }); });

Запуск:

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

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

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