首页 > 解决方案 > Sinon callCount 始终为零

问题描述

在我的节点 js 应用程序中有一个名为 index.js 的文件。下面是该文件的代码。

function initiateProcess(pattern){
    run();
};

function run(){
    console.log('run called');  
}

module.exports ={initiateProcess,run}

对于这个文件,我添加了一个测试用例。在那里,我试图验证是否至少调用了一次 run。

const chai= require('chai');
const server =require('./index');
const sinon =require('sinon');
const { expect } = chai;

describe('entry point test suite',()=>{
    it('should call function every second',()=>{
        const pattern= '* * * * * *';
        let spy = sinon.spy(server,'run');              
        server.initiateProcess(pattern);
        expect(spy.callCount).greaterThan(0);
    })
});

但 callCount 始终为零。我是新来的。我在这里做错了什么。

标签: node.jsmocha.jssinon

解决方案


这并不是一个真正的 Sinon 问题,它实际上只是取决于 JavaScript 的工作原理。

initiateProcessrun当您通过以下方式导出时,在您的模块中声明的引用

module.exports = { initiateProcess, run }

run导出的函数与内部调用的函数不同,它是一个副本。runinitiateProcess

为此,您需要确保run被模拟的函数与在内部调用的函数相同initiateProcess,您可以这样做:

module.exports = {
  initiateProcess(pattern) {
    this.run();
  }
  run() {
    console.log('run called');
  }
}

推荐阅读