Mocha sinon.spy 总是显示函数调用 0 次

Mocha sinon.spy always showing function call 0 times

我是 mocha/chai 的新手。我正在尝试为以下场景编写单元测试用例。我想测试 "callchildfunc" 和 "childfunc2" 在调用 "parent()" 函数时是否被调用。

我已经阅读了基础知识,我的理解是,如果您正在监视任何函数,那么只需在该函数上放置 assert 以检查该函数是否被调用。在上面的脚本文件中意味着如果我将监视 "childfunc2" 和 "callchildfunc" 函数,那么我不需要在测试文件中调用这里,因为它已经在父函数下的脚本文件中调用。理解有误请指正

这是我的 script.js 文件

// script.js    

function childfunc2(){
    console.log("child function without return");
}
function callchildfunc(var1, var2){
   return var1 + var2;
}
function parent(x){
   var getreturnval = callchildfunc(x, 1);
   console.log(getreturnval);
   childfunc2();
}

这是我的测试文件。

//scenario 1

describe('Test for parent() function ', function(){
   it('should make parent call ', function(){

        var spy1 = sinon.spy(window, 'callchildfunc');
        var spy2 = sinon.spy(window, 'childfunc2');
        parent(2);
        expect(spy1).to.have.been.called();
        expect(spy2).to.have.been.called();
        // or
        sinon.assert.calledOnce(spy1);
        sinon.assert.calledOnce(spy1);

    });
});

在 运行 测试之后,我总是收到此错误。

AssertError: expected childfunc2 to be called once but was called 0 times

此外,如果我更改测试文件并调用间谍函数,它就会起作用。

var spy1 = sinon.spy(window, 'callchildfunc');
var spy2 = sinon.spy(window, 'childfunc2');
parent(2);
// After addding these below 2 lines.
window.childfunc2();
window.callchildfunc();

有什么帮助吗?

// Script.js 

module.exports= {
childfunc2:function(){
    console.log("child function without return");
},
callchildfunc:function(var1, var2){
   return var1 + var2;
},
parent:function(x){
   var getreturnval = this.callchildfunc(x, 1);
   console.log(getreturnval);
   this.childfunc2();
}
};

// Test.js

var sinon= require('sinon'), expect=require('chai').expect
var r= require('./functests')
describe('Test for parent() function ', function(){
   it('should make parent call ', function(){
        var spy1 = sinon.spy(r, 'callchildfunc');
        var spy2 = sinon.spy(r, 'childfunc2');
        r.parent(2);
//        expect(spy1).to.have.been.called();
  //      expect(spy2).to.have.been.called();
        // or
        sinon.assert.calledOnce(spy1);
        sinon.assert.calledOnce(spy1);

    });
});

//截图