Тестовый модуль в Nest
Контроллер и сервис уже оформлены общим модулем темы, и проверять их по отдельности неудобно: связь между списком провайдеров и страницей как раз и должна работать вместе.
Класс модуля импортируют в
createTestingModule через
поле imports. После
compile контейнер знает
и сервис, и контроллер так же,
как в рабочем приложении,
только без лишних импортов корня.
Покажем на примере постов:
import { Module } from '@nestjs/common';
import { PostController } from './post.controller.js';
import { PostService } from './post.service.js';
@Module({
controllers: [PostController],
providers: [PostService],
})
export class PostsModule {}
Сервис и контроллер модуля:
import { Injectable } from '@nestjs/common';
@Injectable()
export class PostService {
getPosts(): string {
return 'All posts';
}
}
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 { describe, it, expect } from 'vitest';
import { Test } from '@nestjs/testing';
import { PostsModule } from '../src/posts/posts.module.js';
import { PostController } from '../src/posts/post.controller.js';
describe('PostsModule', () => {
it('wires controller to service', async () => {
const moduleRef = await Test.createTestingModule({
imports: [PostsModule],
}).compile();
const controller = moduleRef.get(PostController);
expect(controller.getPosts()).toBe('All posts');
});
});
Запуск:
npx vitest run test/posts.module.spec.ts
Оформите WorkersModule
с WorkerController
и WorkerService,
импортируйте его в проверке
и сравните строку списка
работников с ожиданием.