我有一个简单的表达例程来保存输入的数据:
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
我不知道如何解决此问题。有什么建议吗?
答案 0 :(得分:0)
由于试图简化问题,我在此处未提供完整的代码示例。但是事实证明,在如此简单的情况下不会发生此问题。而且我意识到某些外部插件(此处为mongoose-slug-hero
会出现问题,因为它们使用了更多无法提供嘲笑的Mongoose模型方法。在所有不同的插件上,问题可能都不同。同样,populate
也不能与模拟糖一起正常工作。您需要进行some more workaround的修复。
最后,我逃避了嘲讽,并开始非自愿地使用jest-mongodb(因为我认为这是单元测试的反模式)。