我正在编写一个单元测试,模拟我的猫鼬依赖关系并测试预期的交互作用。
但是,尽管清楚地模拟了.create()方法以返回IPostDocument的模拟实例(从Mongoose扩展了Document的模拟实例),但由于我的create方法,我一直收到“ TypeError:无法读取未定义的属性'save'”,一直返回未定义状态,就像忽略了我的设置一样。
被测方法:
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(),
);
});
据我所知,当我运行create方法时,应该将post变量分配给返回的模拟文档,该文档上具有.save()方法,而不是“ undefined”。
任何人都可以发现问题所在吗?
谢谢