我有一个简单的express例程来保存传入的数据:
app.post('/news', async (req, res, next) => {
const news = await model.create(req.body);
res.status(201).json(news);
});我想通过使用mockingoose和supertest来编写单元测试。
it('should create news', async () => {
mockingoose(NesModel).toReturn({ _id: '507f191e810c19729de860ea', title: 'dadsd' }, 'save');
const res = await request(app)
.post('/news')
.send({
title: 'ABC',
content: 'adbasdasdsad'
});
expect(res.statusCode).toBe(201);
});我得到了这个错误:
● News › should create news
ValidationError: News validation failed: _id: Cannot read property 'where' of undefined
at new ValidationError (node_modules/mongoose/lib/error/validation.js:31:11)
at model.Document.invalidate (node_modules/mongoose/lib/document.js:2563:32)
at node_modules/mongoose/lib/document.js:2385:17
at node_modules/mongoose/lib/schematype.js:1181:9我想不出怎么解决这个问题。有什么建议吗?
发布于 2020-05-10 19:22:25
我没有在这里给出完整的代码示例,因为我试图保持问题的简单性。但事实证明,在这么简单的情况下,这个问题并不会发生。我意识到这个问题发生在一些外部插件(这里是mongoose-slug-hero),因为他们使用了更多的Mongoose模型的方法,而mockingoose没有提供。问题可能在所有不同的插件上是不同的。此外,populate也不能在mockingoose上正常工作。你需要做some more workaround来修复它。
最后,我离开了mockingoose,开始不由自主地使用jest-mongodb (因为我认为这是单元测试的反模式)。
https://stackoverflow.com/questions/61709627
复制相似问题