sinon:^ 7.5.0mocha: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,并且它有一个指向字符串'dev'
的key NODE_ENV。
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
,在测试过程中进行更改,然后重新设置。那是我的后备计划。
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