当前位置: 首页 > 知识库问答 >
问题:

Sinon存根没有正确替换存根函数

胡霖
2023-03-14

我有一个依赖于另一个函数的函数,而不是测试依赖关系,我只想测试依赖函数的特定结果。然而,当我存根函数时,什么都不会发生,返回的结果就好像我从来没有存根函数一样。

示例代码:

// 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个答案

怀飞扬
2023-03-14

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

如果您将代码更改为具有属性< code>b和< code>a的对象,并且属性< code>a调用属性< code>b,那么它将按预期方式工作:

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

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

module.exports = x;

另外,看看这个答案,它描述了类似的问题。

 类似资料:
  • 我正在尝试使用sinon存根替换一个可能需要很长时间的函数。但是当我运行测试时,测试代码似乎没有使用sinon存根。 这是我要测试的代码。 这是测试代码。 我得到一个断言错误 我做错了什么?为什么不使用存根?摩卡的测试框架。

  • 我尝试了一个虚拟模块,并存根,但不工作。 应用程序.js test.js 我尝试了以下建议:sinon stub不替换函数 但还是一样。它不能取代功能。

  • 我在获取一个sinon存根以返回/解析另一个sinon存根时遇到问题。我正在使用西农、柴、柴和摩卡。 我正在按顺序执行许多异步任务,我想测试的代码看起来像这样: 我尝试为此创建存根的尝试如下所示: “saveit”方法在Terminal.prototype,这就是为什么我需要在那里存根它。当我尝试运行它时,我收到错误消息: 在线上: 但如果我在控制台中转储终端对象,它看起来很好,就像任何其他存根对

  • 如果我已经通过< code > var a = sinon . createstuinstance(my contractor)创建了一个实例。 如何替换其中一个存根函数,如 。 我这样做的主要原因是想实现这个提到的多个回调解决方法

  • 我有一个带有路由器的express应用程序,我想与Sinon一起测试。我无法成功模拟传递到请求处理程序的参数,希望能得到一些帮助。 这是我当前使用Mocha、Sinon、Chai的测试设置

  • 我正在尝试测试点击一种反应成分,以利用酶Sinon 我的Comp组件有一个引发异常的保存功能 当我运行测试时,我希望不会抛出任何错误,并且存根中的空函数会被触发——但事实并非如此。组件内部的实际函数被触发,而不是空的存根。