Вы правы, в структуре проекта отсутствует файл documents.controller.spec.ts
, который обычно используется для написания unit-тестов контроллера. Это упущение, и я сейчас объясню, почему он важен, а также покажу, как его добавить.
Почему нужен documents.controller.spec.ts
?
Файл documents.controller.spec.ts
необходим для тестирования контроллера DocumentsController
. Unit-тесты позволяют убедиться, что контроллер корректно обрабатывает запросы и взаимодействует с сервисом. Это особенно важно для поддержания качества кода и предотвращения ошибок при внесении изменений.
Как добавить documents.controller.spec.ts
?
Вот пример файла documents.controller.spec.ts
для тестирования контроллера DocumentsController
:
typescript
import { Test, TestingModule } from '@nestjs/testing';
import { DocumentsController } from './documents.controller';
import { DocumentsService } from './documents.service';
describe('DocumentsController', () => {
let controller: DocumentsController;
let service: DocumentsService;
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
controllers: [DocumentsController],
providers: [
{
provide: DocumentsService,
useValue: {
findAll: jest.fn().mockResolvedValue([
{ id: 1, title: 'Test Document 1' },
{ id: 2, title: 'Test Document 2' },
]),
findOne: jest.fn().mockResolvedValue({ id: 1, title: 'Test Document 1' }),
create: jest.fn().mockResolvedValue({ id: 3, title: 'New Document' }),
},
},
],
}).compile();
controller = module.get<DocumentsController>(DocumentsController);
service = module.get<DocumentsService>(DocumentsService);
});
it('should be defined', () => {
expect(controller).toBeDefined();
});
describe('findAll', () => {
it('should return an array of documents', async () => {
const result = await controller.findAll();
expect(result).toEqual([
{ id: 1, title: 'Test Document 1' },
{ id: 2, title: 'Test Document 2' },
]);
});
});
describe('findOne', () => {
it('should return a single document', async () => {
const result = await controller.findOne(1);
expect(result).toEqual({ id: 1, title: 'Test Document 1' });
});
});
describe('create', () => {
it('should create a new document', async () => {
const dto = { documentNumber: 'DOC-3', documentDate: new Date(), title: 'New Document', filepath: '/path/to/file' };
const result = await controller.create(dto);
expect(result).toEqual({ id: 3, title: 'New Document' });
});
});
});
Объяснение:
- Модуль тестирования:
- Используется
TestingModule
из NestJS для создания тестового окружения. - Сервис
DocumentsService
замокан с помощьюjest.fn()
.
- Используется
- Тесты:
findAll
: Проверяет, что метод возвращает массив документов.findOne
: Проверяет, что метод возвращает один документ по ID.create
: Проверяет, что метод создает новый документ.
- Mock-сервис:
- Вместо реального сервиса используется mock-объект, чтобы изолировать тестирование контроллера.
Добавление файла в структуру проекта:
После добавления файла структура проекта будет выглядеть так:
javascript
src/
├── documents/
│ ├── documents.controller.ts
│ ├── documents.controller.spec.ts # Unit-тесты для контроллера
│ ├── documents.service.ts
│ ├── documents.module.ts
│ └── dto/
│ └── create-document.dto.ts
Теперь у вас есть тесты для контроллера DocumentsController
, которые можно запускать с помощью команды:
bash
npm run test
Тесты помогут убедиться, что контроллер работает корректно, и упростят процесс внесения изменений в код.