Sinon存根未正确替换存根函数

时间:2018-06-12 18:52:17

标签: javascript node.js sinon chai

我有一个函数取决于另一个函数而不是测试依赖项我只想测试该依赖函数的特定结果。但是,当我将函数存根时没有任何反应,并且返回结果就好像我从来没有在函数中存根。

示例代码:

// File being tested
function a() {
  let str = 'test';
  return b(str);
}

function b(str) {
  return str + str;
}

module.exports = {
  a: a,
  b: b
};

// Test file
let test = require('file.to.test.js');

it('should correctly stub the b function', () => {
  sinon.stub(test, 'b').returns('asdf');
  let result = test.a();

  // Expected 
  assert(result === 'asdf');

  // Received
  assert(result === 'testtest');
});

1 个答案:

答案 0 :(得分:0)

您的存根没有预期的效果,因为您已经存根导入对象的属性。但是,function a()会一直调用原始function b(),因为它调用函数,而不是对象方法。

如果更改代码的方式是存在具有属性ba以及属性a的对象,则调用属性b,那么它将起作用预期的方式:

const x = {};
x.a = () => {
  let str = 'test';
  return x.b(str);
}

x.b = (str) => {
  return str + str;
}

module.exports = x;

另外,看看at this answer,它描述了类似的问题。