NestJS — Тестирование зависимости @Inject(‘Значение’) Зависимость

#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. Большое спасибо! Это была глупая ошибка с моей стороны. Я оставлю вопрос открытым на случай, если кто-то столкнется с чем-то подобным или допустит ту же ошибку.