我希望模拟 Mongoose 模型的 save() 函数。 我想要测试的函数在名为 user.js 的文件中如下所示:
var User = import('User.js')
post: function(req, res) {
var user = new User({
password : req.body.password,
email : req.body.email,
});
user.save( function(err) {
if (err) {
....
} else {
....
}
});
我尝试在另一个名为user_spec.js的文件中编写一个类似以下内容的测试:
var Hander = require('user.js')
it('works properly', function() {
spyOn(User, 'save').andReturn(null)
Handler.post(req, res);
});
但是这让我出现了错误:
save() method does not exist
我进行了更深入的挖掘,发现User模型本身并没有save()方法,只有实例才有。这意味着我必须模拟User的构造函数,但我在这方面遇到了很多麻烦。其他帖子提到了类似以下语句:
spyOn(window, User)
为了解决这个问题,在NodeJS中,全局对象(global)(类似于window)没有User对象,因为我将其导入为一个变量。是否可能模拟构造函数给我一个带有模拟save()方法的东西?我也看了一个名为rewire的npm模块,但我希望在处理程序中不用模拟和替换整个用户模块。