我想模拟猫鼬模型的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中,全局变量(此处等效于窗口)没有User,因为我导入的是变量。是否可以模拟构造函数以通过模拟的save()给我一些东西?我还看了一个名为rewire的npm模块,但我希望可以在不模拟和替换处理程序中整个用户模块的情况下完成此任务。
这不能解决模拟局部变量的问题,但是可以解决单元测试新文档创建的问题。
创建新文档时,最好使用Model.create()。可以有效地模拟它,并且代码更少。处理和测试它的正确方法是:
var User = import('User.js')
post: function(req, res) {
User.create({
password : req.body.password,
email : req.body.email,
}, function(err) {
if (err) {
....
} else {
....
}
});
});
对应测试:
var Hander = require('user.js')
it('works properly', function() {
spyOn(User, 'create').andReturn(null)
Handler.post(req, res);
});
希望这种解决方法可以帮助其他人对茉莉和猫鼬单元测试感到沮丧。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句