我正在尝试为具有用户模型的Express应用程序编写一些测试。我的方法之一如下所示:
let user = await User.findById(req.params.userId);
user.name = req.body.name || user.name;
user.password = req.body.password || user.
user = await user.save();
该代码按预期运行,但是当我对其进行测试时,Jest抱怨道:
TypeError: user.save is not a function
现在,我正在像这样模拟整个用户模型:
jest.mock('../../models/User');
我试图像这样模拟保存功能,但没有改变:
jest.spyOn(User.prototype, 'save')
.mockImplementationOnce(() => Promise.reject('fail update'))
如我之前所说,代码运行良好。我在运行服务器时没有收到此错误。
但是,发生了一件奇怪的事情:当我运行测试时,我从猫鼬那里得到了这个警告。
猫鼬:看起来您正在尝试使用Jest的默认jsdom测试环境来测试Mongoose应用程序。请确保您已阅读有关配置Jest以测试Node.js应用程序的Mongoose的文档:http : //mongoosejs.com/docs/jest.html
我阅读了文档,它说的是在Jest配置文件上将testEnvironment设置为“ node”,这已经在做了。这是我的jest.config.js文件:
module.exports = {
testEnvironment: 'node'
};
但是我一直收到警告。
这是我的测试脚本: jest --watchAll
任何帮助将不胜感激。提前致谢
您收到该错误的原因是以下行:
let user = User.findById(req.params.userId)
findById()
是异步方法,因此您必须将await
关键字放在代码中,如下所示:
let user = await User.findById(req.params.userId)
由于您的代码并未真正等待findById()
该user
变量的响应,undefined
因此它user.save()
实际上不是函数。您可以尝试打印console.log(user)
,它将完成undefined
。
为避免出现此消息“ Mongoose: looks like you're trying to test a Mongoose app with Jest's...
”,您必须在中配置Jest package.json
,如下所示:
"jest": {
"testEnvironment": "node"
},
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句