node.js - 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 始终为零。我是新来的。我在这里做错了什么。
解决方案
这并不是一个真正的 Sinon 问题,它实际上只是取决于 JavaScript 的工作原理。
initiateProcess
run
当您通过以下方式导出时,在您的模块中声明的引用
module.exports = { initiateProcess, run }
run
导出的函数与内部调用的函数不同,它是一个副本。run
initiateProcess
为此,您需要确保run
被模拟的函数与在内部调用的函数相同initiateProcess
,您可以这样做:
module.exports = {
initiateProcess(pattern) {
this.run();
}
run() {
console.log('run called');
}
}
推荐阅读
- reactjs - 没有大气数据的谷歌地图自动完成reactjs
- php - 通过 ID 获取媒体模型并使用它来制作可下载的 URL 不起作用
- vhdl - 如何减少重复过程(握手)的状态逻辑冗余?
- wcf - 远程计算机中的 WCF netTcpBinding 超出消息大小配额
- sql - 如何为以下查询编写 sql 语句?
- javascript - React Native:如何在 View 中添加变量?
- javascript - 在 localStorage 中存储信息
- sql - 如何在 SQL 中更新名为“值”的字段?我需要减少 15%
- flutter - 使用 Flutter 计算两个日期之间的天数
- nodemon - Nodemon 根据更改的文件名执行不同的脚本