node.js - 如何 stub /监视模块中内部调用的外部方法?

标签 node.js sinon

//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;

是否可以 stub “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);

最佳答案

简而言之:不。

您的模块包含对 isUn​​ique 函数的两个引用:一个来自函数声明本身,另一个分配给 exports.isUnique

create 函数正在使用第一个,但 Sinon 正在对第二个进行 stub 处理。

为了调用 stub ,create 需要使用被 stub 的引用:

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/

相关文章:

javascript - 没有被调用的 Promise 的 Sinon spy

reactjs - 使用 sinon.fakeTimers 测试 setInterval() 不起作用?

javascript - Node.JS 和浏览器之间的 RequireJS 对 jQuery 的简单可选依赖

node.js - Docker代理错误:无法将请求/api/product/B002QYW8LW从本地主机:3000代理到http://本地主机:5000

unit-testing - 使用RequireJS(和Jasmine/Sinon)时如何 stub 在另一个 View 渲染方法中实例化的主干 View

Node.js sinon 在并行执行中 stub 函数导致测试失败

javascript - 使用回调 stub 函数

javascript - Mongoose :.save 不是函数

node.js - 使用 NodeJS 的 QnAMaker 自适应卡

javascript - node.js promise 错误未定义函数