Я пишу модульный тест, который проверяет мои Mon goose зависимости и проверяет ожидаемые взаимодействия.
Однако, несмотря на явный вывод из использования метода .create (), чтобы вернуть имитированный экземпляр IPostDocument (который расширяет Document с mon goose), я продолжаю получать сообщение «TypeError: Невозможно прочитать свойство 'save' of undefined", потому что мой метод create продолжает возвращать undefined, почти как при игнорировании моих настроек.
Метод тестируется:
async create(
title: string,
author: string,
technologies: string,
): Promise<IPostDocument> {
const postToCreate = new Post(
null,
title,
author,
technologies,
false,
new Date(),
);
const post = await this.postModel.create(postToCreate);
return await post.save();
}
Неудачный тест:
it('should call create and save from Mongoose', async () => {
const mockPostModel = TypeMoq.Mock.ofType<Model<IPostDocument>>();
const mockPostDocument = TypeMoq.Mock.ofType<IPostDocument>();
mockPostDocument
.setup(x => x.save())
.returns(async () => mockPostDocument.object);
mockPostModel
.setup(x => x.create(TypeMoq.It.isAnyObject))
.returns(async () => mockPostDocument.object);
const postsRepository = new PostsRepository(mockPostModel.object);
await postsRepository.create('A title', 'An author', 'Tech');
mockPostModel.verify(
async x => await x.create(TypeMoq.It.isAny),
TypeMoq.Times.atMostOnce(),
);
});
Насколько я вижу, когда мой метод создания запущен, переменная post должна быть присвоена моему возвращенному макетированному документу, который имеет метод .save (), а не undefined.
Может кто-нибудь определить, где может быть проблема?
Спасибо