Mockingoose _id:无法读取未定义错误的属性“ where”

时间:2020-05-10 09:16:00

标签: node.js unit-testing express mongoose mockingoose

我有一个简单的表达例程来保存输入的数据:

app.post('/news', async (req, res, next) => {
  const news = await model.create(req.body);
  res.status(201).json(news);
});

我想使用mockingoosesupertest为此编写单元测试。

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

我不知道如何解决此问题。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

由于试图简化问题,我在此处未提供完整的代码示例。但是事实证明,在如此简单的情况下不会发生此问题。而且我意识到某些外部插件(此处为mongoose-slug-hero会出现问题,因为它们使用了更多无法提供嘲笑的Mongoose模型方法。在所有不同的插件上,问题可能都不同。同样,populate也不能与模拟糖一起正常工作。您需要进行some more workaround的修复。

最后,我逃避了嘲讽,并开始非自愿地使用jest-mongodb(因为我认为这是单元测试的反模式)。