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

时间:2019-12-06 13:45:16

标签: unit-testing mocha sinon stubbing

sinon:^ 7.5.0 摩卡咖啡:3.4.2

基于此documentation

的代码如下
  

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

使用 mocha sinion 的代码。我只想存入 process.env.NODE_ENV 的值。

sinon.stub(process.env, 'NODE_ENV').value("prod");

我已经打印了 proccess.env ,它具有一个 NODE_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_ENV,在测试过程中进行更改,然后重新设置。那是我的后备计划。

1 个答案:

答案 0 :(得分:0)

这里是为process.env.NODE_ENV制作存根的示例,在制作存根之前,我们需要在NODE_ENV对象上声明process.env属性。否则,将引发错误:

  

TypeError:无法存根不存在的自身属性NODE_ENV

index.test.ts

import sinon from "sinon";
import { expect } from "chai";

describe("59214393", () => {
  it("should mock 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();
  });

  it("should back to original value", () => {
    expect(process.env.NODE_ENV).to.be.eq("");
  });
});

单元测试结果:

  59214393
    ✓ should mock process.env
    ✓ should back to original value


  2 passing (11ms)

---------------|----------|----------|----------|----------|-------------------|
File           |  % Stmts | % Branch |  % Funcs |  % Lines | Uncovered Line #s |
---------------|----------|----------|----------|----------|-------------------|
All files      |      100 |      100 |      100 |      100 |                   |
 index.test.ts |      100 |      100 |      100 |      100 |                   |
---------------|----------|----------|----------|----------|-------------------|

源代码:https://github.com/mrdulin/mocha-chai-sinon-codelab/tree/master/src/stackoverflow/59214393