基于一个示例,我试图对数据库函数进行存根。但我收到“ ReferenceError:未定义数据库”。不知道为什么存根不起作用!请帮忙!
下面是我要测试的代码-
module.exports = {
getName : function(name){
console.log(name);
},
setupNewUser : function(info, callback) {
var user = {
name: info.name,
nameUpperCase: info.name.toUpperCase()
};
console.log(user.name,user.nameUpperCase)
try {
Database.save(user, callback);
}
catch(err) {
callback(err);
}
}
}
以下是我的测试-
const expect = require('chai').expect;
const sinon = require('sinon');
const crypto = require('../crypto/crypto');
describe("test crypto module",function(){
it("should pass object with correct values to save",function(){
console.log("save");
var save = sinon.stub(Database, 'save');
var info = { name: 'test' };
var expectedUser = {
name: info.name,
nameUpperCase: info.name.toUpperCase()
};
crypto.setupNewUser(info, function() { });
sinon.assert.calledWith(save, expectedUser);
save.restore();
})
})
答案 0 :(得分:0)
要运行这一行测试,您还需要在测试代码中定义Database
:
var save = sinon.stub(Database, 'save');
您的原始代码段未显示其中如何定义Database
。如果是调用require
的结果,则可能只需要在测试代码中添加等效的require
(由于节点的模块缓存的工作原理):
const Database = require('../path/to/my/db/module');
或者,如果由于调用某个函数而导致更复杂的事情发生,则可能需要使用proxyquire
之类的东西来注入它,以便该函数返回已存根的副本。但是您需要在代码中向我们展示Database
的定义,以便可以肯定地知道这一点。