#typescript #dependency-injection #nestjs
#typescript #зависимость-внедрение #nestjs
Вопрос:
Пытаюсь протестировать класс, который использует @Inject() для внедрения своих зависимостей.
users.controller.ts
import { Controller, HttpCode, Body, Post, Inject, Get, Param } from '@nestjs/common';
import { ApiTags } from '@nestjs/swagger';
import { UploadPhoto } from './usecase/upload-photo.usecase';
import { UploadPhotoReqDto } from './dto/upload-photo.req.dto';
import { Document } from 'dynamoose/dist/Document';
import { DynamooseModel } from '../dynamoose/dynamoose-model.interface';
import { InjectModel } from '../dynamoose/common/dynamoose.decorator';
@ApiTags('Users')
@Controller('users')
export class UsersController {
constructor(
private readonly uploadPhoto: UploadPhoto,
@Inject('UserModel') private readonly UserModel: DynamooseModel<Document>
) {}
@Post('/profile/upload_photo')
@HttpCode(200)
async postUploadPhoto(@Body() requestBody: UploadPhotoReqDto): Promise<string> {
const { mime, image } = requestBody;
const image_url = await this.uploadPhoto.start({ mime, image });
return image_url;
}
}
Это мой тестовый класс.
users.controller.spec.ts
import { Test, TestingModule } from '@nestjs/testing';
import { UploadPhoto } from './usecase/upload-photo.usecase';
import { UsersController } from './users.controller';
const BaseUseCaseMock = {
start: () => {
console.log('Starting BaseUseCaseMock');
},
};
describe('UsersController', () => {
let controller: UsersController;
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
controllers: [UsersController],
providers: [
UploadPhoto,
{
provide: 'UserModel',
useValue: {},
},
],
})
.overrideProvider(UploadPhoto)
.useValue(BaseUseCaseMock)
.compile();
controller = module.get<UsersController>(UsersController);
});
it('Should_BeDefined', () => {
expect(controller).toBeDefined();
});
});
Все, что я проверяю на данный момент, это правильно ли создан экземпляр UsersController. Правильно ли это использовать для пользовательских поставщиков NestJS?
Есть идеи о том, почему это не работает?
Ответ №1:
После обсуждения в Discord проблема заключалась в users.service.spec.ts
файле с той же настройкой, но без поддельных зависимостей. Приведенный выше тест на самом деле в порядке.
Комментарии:
1. Большое спасибо! Это была глупая ошибка с моей стороны. Я оставлю вопрос открытым на случай, если кто-то столкнется с чем-то подобным или допустит ту же ошибку.