Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing process.env sinon.stub值给出TypeError:无法将符号值转换为字符串_Unit Testing_Mocha.js_Sinon_Stubbing - Fatal编程技术网

Unit testing process.env sinon.stub值给出TypeError:无法将符号值转换为字符串

Unit testing process.env sinon.stub值给出TypeError:无法将符号值转换为字符串,unit-testing,mocha.js,sinon,stubbing,Unit Testing,Mocha.js,Sinon,Stubbing,sinon:^7.5.0 摩卡咖啡:3.4.2 基于此,代码如下所示 存根值(newVal) 为此存根定义一个新值。 sinon.stub(myObj,'example').value('newValue') 我的代码使用了mocha和sinion。我只想存根process.env.NODE\u env的值 sinon.stub(process.env, 'NODE_ENV').value("prod"); 我已经打印了process.env,它有一个键节点_env,指向一个字符串,'dev'

sinon:^7.5.0 摩卡咖啡:3.4.2

基于此,代码如下所示

存根值(newVal) 为此存根定义一个新值。 sinon.stub(myObj,'example').value('newValue')

我的代码使用了mochasinion。我只想存根process.env.NODE\u env的值

sinon.stub(process.env, 'NODE_ENV').value("prod");
我已经打印了process.env,它有一个节点_env,指向一个字符串,
'dev'

下面是运行摩卡测试时的结果

TypeError: Cannot convert a Symbol value to a string
  at module.exports (node_modules/sinon/lib/sinon/util/core/is-es-module.js:16:58)
  at stub (node_modules/sinon/lib/sinon/stub.js:28:9)
  at Sandbox.stub (node_modules/sinon/lib/sinon/sandbox.js:318:33)
令人困惑的是,这是可行的:

let whatever= { another_key: { onemore: "pure"} };
sinon.stub(whatever.another_key, 'onemore').value("mashed");
我也尝试过使用沙盒(我不知道为什么,因为从v5开始,sinon是沙盒的同义词)

let sandbox = sinon.createSandbox();
describe(....
     ...
     beforeEach(function(){
         sandbox.stub(process.env, 'NODE_ENV').value('prod');
     });

      afterEach(function(){
        sandbox.restore();
      });
);
同样的错误

我哪里出错了


ps:我知道我可以保存
process.env.NODE\u env
,在测试期间更改它,并将其设置回原位。这是我的后备计划

这里是一个为
process.env.NODE_env
创建存根的示例,在创建存根之前,我们需要在
process.env
对象上声明
NODE_env
属性。否则,它将抛出一个错误:

TypeError:无法存根不存在的自有属性节点\u ENV

index.test.ts

从“sinon”导入sinon;
从“chai”导入{expect};
描述(“59214393”,()=>{
它(“应该模拟process.env”,()=>{
process.env.NODE_env=“”;
const stub=sinon.stub(process.env,“NODE_env”).value(“prod”);
expect(process.env.NODE_env.to.be.eq(“prod”);
stub.restore();
});
它(“应该回到原始值”,()=>{
expect(process.env.NODE_env).to.be.eq(“”);
});
});
单元测试结果:

59214393
✓ 应该是mock process.env
✓ 应该回到原来的价值
2次通过(11毫秒)
---------------|----------|----------|----------|----------|-------------------|
文件|%Stmts |%Branch |%Funcs |%Line |未覆盖行|s|
---------------|----------|----------|----------|----------|-------------------|
所有文件| 100 | 100 | 100 | 100 ||
index.test.ts | 100 | 100 | 100 | 100 ||
---------------|----------|----------|----------|----------|-------------------|
源代码: