Sinonjs存根未替换方法

时间:2019-03-09 04:00:54

标签: javascript sinon-chai

基于一个示例,我试图对数据库函数进行存根。但我收到“ 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();


    })
})

1 个答案:

答案 0 :(得分:0)

要运行这一行测试,您还需要在测试代码中定义Database

var save = sinon.stub(Database, 'save');

您的原始代码段未显示其中如何定义Database。如果是调用require的结果,则可能只需要在测试代码中添加等效的require(由于节点的模块缓存的工作原理):

const Database = require('../path/to/my/db/module');

或者,如果由于调用某个函数而导致更复杂的事情发生,则可能需要使用proxyquire之类的东西来注入它,以便该函数返回已存根的副本。但是您需要在代码中向我们展示Database的定义,以便可以肯定地知道这一点。