Вы правы, в структуре проекта отсутствует файл 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | 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
1 2 3 4 5 6 7 8 | src/ ├── documents/ │ ├── documents.controller.ts │ ├── documents.controller.spec.ts # Unit-тесты для контроллера │ ├── documents.service.ts │ ├── documents.module.ts │ └── dto/ │ └── create-document.dto.ts |
Теперь у вас есть тесты для контроллера DocumentsController
, которые можно запускать с помощью команды:
bash
1 | npm run test |
Тесты помогут убедиться, что контроллер работает корректно, и упростят процесс внесения изменений в код.