//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之类的模块。

关于node.js - 如何在内部调用的模块中 stub 或监视外部方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39084688/

10-11 08:33