Я пытаюсь протестировать мой класс контроллера 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 () => {
Поскольку я думаю, что могу прочитать из сообщения об ошибке, должно быть что-то не так с «доставкой» модели в тест, но я действительно не знаю, как я могу получить Модель без инициализации соединения или около того ...
Что я могу сделать? У вас есть пример кода, который работал для вас?