NestJS, как создать новую модель мангуста в unittest? - PullRequest
0 голосов
/ 23 мая 2019

Я пытаюсь протестировать мой класс контроллера NestJs. Я уже издевался над моим Сервисом, используя ts-mockito, но сейчас я пытаюсь создать объекты Мангуста, которые я хочу вернуть и ожидаю, что контроллер вернет их. Как мне удается создать новый объект модели для тестирования?

это мой сервис:

@Injectable()
export class ProjectService {
    constructor(
        @InjectModel('Project') private readonly projectModel: Model<Project>,
        private tagService: TagService,
    ) {} ...

Это моя модель

    name: {type: String, required: true},
    description: String,
    created: {type: Date, default: Date.now},
});
export const ProjectSchema = schema;

export interface Project extends Document {
    readonly name: string,
    readonly description: string,
    readonly created: Date,
}

А это мой модуль:

@Module({
    imports: [
        MongooseModule.forFeature([{ name: 'Project', schema: ProjectSchema }]),
    ],
    controllers: [
        ProjectController
    ],
    providers: [
        ProjectService,
    ],
})
export class ProjectModule {}

Это мой тест:

describe('ProjectController', async () => {
    let projectController: ProjectController;
    let projectServiceMock: ProjectService = mock(ProjectService);
    let projectModel: Model<Project>;

    beforeAll(async () => {
        projectModel = mock(Model);

        const module: TestingModule = await Test.createTestingModule({
            controllers: [ProjectController],
            providers: [
                {
                    provide: ProjectService,
                    useValue: instance(projectServiceMock)
                },
                {
                    provide: 'Project',
                    useValue: instance(projectModel)
                }
            ]
        }).compile();

        projectController = module.get<ProjectController>(ProjectController);
    });

Теперь я пытаюсь создать новый объект проекта, вернуть его из моего сервиса и ожидать от контроллера:

it('should return Project with id from projectService', async () => {
            const project = new projectModel({name: 'ProjectName', description: 'ProjectDescription'});

            let result = Promise.resolve(project);
            when(projectServiceMock.getById('projectId')).thenReturn(result);

            await expect(projectController.getById('projectId')).toEqual(result);
        });

Но я получаю эту ошибку:

Nest cannot find given element (it does not exist in current context)

      25 | 
      26 |         projectController = module.get<ProjectController>(ProjectController);
    > 27 |         projectModel = module.get<Model<Project>>('Project');
         |                               ^
      28 |     });
      29 | 
      30 |     describe('getAll', async () => {

Поскольку я думаю, что могу прочитать из сообщения об ошибке, должно быть что-то не так с «доставкой» модели в тест, но я действительно не знаю, как я могу получить Модель без инициализации соединения или около того ... Что я могу сделать? У вас есть пример кода, который работал для вас?

...