如何使用jest/sinon等在javascript中模拟(更改值)全局变量?
我正在为ts文件编写测试用例,该文件包含如下全局变量:如何使用jest/sinon等在javascript中模拟(更改值)全局变量?,javascript,typescript,unit-testing,jestjs,sinon,Javascript,Typescript,Unit Testing,Jestjs,Sinon,我正在为ts文件编写测试用例,该文件包含如下全局变量: let cachedSecret: any; const find = () => { if(cachedSecret){ //return something } else { //return something else } } 我需要找到一种方法,以便对于其中一个测试用例,我可以将cachedSecret的值模拟为某个字符串,而在另一个测试用例中,它的值应该为null 我正在使用j
let cachedSecret: any;
const find = () => {
if(cachedSecret){
//return something
} else {
//return something else
}
}
我需要找到一种方法,以便对于其中一个测试用例,我可以将cachedSecret的值模拟为某个字符串,而在另一个测试用例中,它的值应该为null
我正在使用jest和sinon,但我还没有找到一种方法来做到这一点
谢谢您可以使用package模拟模块范围中定义的变量
例如
index.ts
:
让cachedSecret:任意;
常量查找=()=>{
log('cachedSecret:',cachedSecret,cachedSecret的类型);
如果(缓存秘密){
返回“某物”;
}否则{
返回“其他东西”;
}
};
导出{find};
index.test.ts
:
从“重新布线”导入重新布线;
描述('63955435',()=>{
它('应该返回某物',()=>{
常数模=重新布线('./');
const revert=mod.\uuuuu set\uuuuu('cachedSecret',true);
const actual=mod.find();
期望(实际)。toEqual(“某物”);
回复();
});
它('应该返回其他东西',()=>{
const mod=require('./');
const actual=mod.find();
期望(实际)。toEqual(“其他东西”);
});
});
单元测试结果和覆盖率报告:
通过src/stackoverflow/63955435/index.test.ts
63955435
✓ 应该返回一些内容(202ms)
✓ 应该返回其他内容(40毫秒)
cachedSecret:真布尔值
console.log src/stackoverflow/63955435/index.ts:4
cachedSecret:未定义未定义
测试套件:1个通过,共1个
测试:2次通过,共2次
快照:共0个
时间:4.4s,估计11s
npm脚本
:
“测试:重新布线”:“ts节点-O'{\'module\':\'commonjs\'}'节点\u modules/jest/bin/jest.js”,
源代码:我想你应该首先嘲笑这个类。代码缺乏上下文,有没有真正的理由认为它是全局的?在模块中求值时,
让cachedSecret
声明局部变量而不是全局变量。不,没有办法用玩笑来访问它。将需要模拟的所有内容放到可以用jest.mock模拟的模块中。