如何用 Sinon 存根 JSON 文件
How to stub a JSON file with Sinon
我有一个 JSON 文件,我需要按以下方式:
const things = require('./path/to/things);
我想在沙盒中存根这个文件,所以它总是 returns 一个给定的夹具。
const fixture = {
fake: "things"
}
const sandbox = sinon.createSandbox();
beforeEach(() => {
sandbox.stub(things).returns(fixture);
});
afterEach(() => {
sandbox.restore();
});
这会导致错误 returns is not a function
。我不确定如何使用沙箱存根 JSON。谁能帮帮我?
您只能存根方法调用。在这种情况下,调用是 require(...)
。我想你有两个选择:
存根 require 函数。
const sinon = require('sinon');
const Module = require('module');
const sandbox = sinon.createSandbox();
sandbox.stub(Module.prototype, 'require').returns({fake:'things'});
const things = require('./things/');
console.log(JSON.stringify(things));
这是对上述内容的回复link:https://repl.it/repls/PessimisticSubtleHexagon
让你的测试系统依赖于things
并注入它。这样您就可以将要测试的逻辑与导入语句分离。
另一种方法是使用 proxyquire 允许 require
语句 return 模拟 json。
// noCallThru() is used to prevent call to the real JSON
// @see https://github.com/thlorenz/proxyquire#preventing-call-thru-to-original-dependency
const proxyquire = require('proxyquire').noCallThru();
const fixture = {
fake: "things"
}
const src = proxyquire('./source-file', { './path/to/things': fixture });
beforeEach(() => {
// empty
});
afterEach(() => {
// empty
});
希望对您有所帮助
我有一个 JSON 文件,我需要按以下方式:
const things = require('./path/to/things);
我想在沙盒中存根这个文件,所以它总是 returns 一个给定的夹具。
const fixture = {
fake: "things"
}
const sandbox = sinon.createSandbox();
beforeEach(() => {
sandbox.stub(things).returns(fixture);
});
afterEach(() => {
sandbox.restore();
});
这会导致错误 returns is not a function
。我不确定如何使用沙箱存根 JSON。谁能帮帮我?
您只能存根方法调用。在这种情况下,调用是 require(...)
。我想你有两个选择:
存根 require 函数。
const sinon = require('sinon'); const Module = require('module'); const sandbox = sinon.createSandbox(); sandbox.stub(Module.prototype, 'require').returns({fake:'things'}); const things = require('./things/'); console.log(JSON.stringify(things));
这是对上述内容的回复link:https://repl.it/repls/PessimisticSubtleHexagon
让你的测试系统依赖于
things
并注入它。这样您就可以将要测试的逻辑与导入语句分离。
另一种方法是使用 proxyquire 允许 require
语句 return 模拟 json。
// noCallThru() is used to prevent call to the real JSON
// @see https://github.com/thlorenz/proxyquire#preventing-call-thru-to-original-dependency
const proxyquire = require('proxyquire').noCallThru();
const fixture = {
fake: "things"
}
const src = proxyquire('./source-file', { './path/to/things': fixture });
beforeEach(() => {
// empty
});
afterEach(() => {
// empty
});
希望对您有所帮助