如何 stub/spy 内部调用模块中的外部方法?
How to stub/spy external methods in a module that are called internally?
//entity module
function isUnique(name) {
return true;
}
exports.isUnique = isUnique;
function create(name) {
if (isUnique(name)) { return console.log(name); }
else { return new Error(); }
}
exports.create = create;
是否可以对 "isUnique" 方法进行存根以更改 "create" 方法的行为?
var entity = require("./entity");
var sinon = require("sinon");
var assert = require("assert");
var stub = sinon.stub(entity, "isUnique", function (name) { return false });
entity.create("test");
stub.restore();
assert(stub.calledOnce, true);
简而言之:没有。
您的模块包含对 isUnique
函数的两个引用:一个来自函数声明本身,另一个分配给 exports.isUnique
.
create
函数使用第一个,但 Sinon 正在使用第二个。
要调用存根,create
需要使用存根的引用:
if (exports.isUnique(name)) { return console.log(name); }
// `this.isUnique` also works, because `this` === `module.exports`
或者,您可以使用像 rewire
.
这样的模块
//entity module
function isUnique(name) {
return true;
}
exports.isUnique = isUnique;
function create(name) {
if (isUnique(name)) { return console.log(name); }
else { return new Error(); }
}
exports.create = create;
是否可以对 "isUnique" 方法进行存根以更改 "create" 方法的行为?
var entity = require("./entity");
var sinon = require("sinon");
var assert = require("assert");
var stub = sinon.stub(entity, "isUnique", function (name) { return false });
entity.create("test");
stub.restore();
assert(stub.calledOnce, true);
简而言之:没有。
您的模块包含对 isUnique
函数的两个引用:一个来自函数声明本身,另一个分配给 exports.isUnique
.
create
函数使用第一个,但 Sinon 正在使用第二个。
要调用存根,create
需要使用存根的引用:
if (exports.isUnique(name)) { return console.log(name); }
// `this.isUnique` also works, because `this` === `module.exports`
或者,您可以使用像 rewire
.