当前位置: 首页 > 面试题库 >

使用Sinon在同一文件中存根方法

乐华晖
2023-03-14
问题内容

我试图对文件中的一个函数进行单元测试,同时在SAME文件中存根另一个函数,但是未应用模拟程序,而是调用了real方法。这是一个例子:

// file: 'foo.js'

export function a() {
   // .....
}

export function b() { 
   let stuff = a(); // call a
   // ...do stuff
}

而我的测试:

import * as actions from 'foo';

const aStub = sinon.stub(actions, 'a').returns('mocked return');
actions.b(); // b() is executed, which calls a() instead of the expected aStub()

问题答案:

一些重组可以使这项工作。

我使用了commonJS语法。在ES6中也应以相同的方式工作。

foo.js

const factory = {
  a,
  b,
}
function a() {
  return 2;
}

function b() {
  return factory.a();
}

module.exports = factory;

test.js

const ser = require('./foo');
const sinon = require('sinon');

const aStub = sinon.stub(ser, 'a').returns('mocked return');
console.log(ser.b());
console.log(aStub.callCount);

输出量

模拟回报

1个



 类似资料:
  • 我想知道我是否缺少关于sinon.js的任何信息,我尝试使用sinon.stub()。返回和收益率,但无法得到结果。任何指针都将有所帮助。 我有一个模块,它调用另一个从数据库返回值的模块 我使用mocha作为测试框架,也使用sinon。我面临的问题是,当我创建一个users.findOne存根以返回一个值时,控件不会到达我的else if(用户)条件。 我的单元测试案例如下

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

  • 我正在尝试使用typescript、mocha、sinon和chai http为我的express路由器编写一个集成测试。这个路由器使用我编写的自定义中间件,它检查头中的JWT。 理想情况下,我想存根我的authMiddleware,这样我就可以控制它的行为,而不必为每个测试用例提供有效/无效的JWT。 当我尝试在测试中存根时,我意识到Express使用的实际实现,而不是模拟的实现。 在模拟aut

  • 我有一个Redux操作,它本身分派了另外两个操作。每个操作都是从导入的函数中检索的。一个来自本地模块,另一个来自外部库。 在我的测试中,我使用一个 沙箱来存根函数,但只有两个测试通过。我期待所有3个都通过。 最后一个预期失败,错误为: TypeError:[Function:functionB]不是间谍或对间谍的调用! 当我将功能输出到控制台时,我得到了这个,这似乎与Babel导入导出导出的方式有

  • 我试图为express中间件功能设置存根伪造,但它并没有被取代。 我正试图通过callsFake函数使用sinon stubbing,正如他们最新文档中建议的那样。 即使我需要模块并在导出时替换属性中的函数。我一直看到原来的函数行为在起作用。 我知道我应该在安装中间件函数之前尝试将函数存根,而这正是第一次导入express的时候。 这是我尝试存根的函数,定义为函数并导出为对象。它在脚本文件中定义,

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

  • 我希望在当前测试的文件中存根一个函数。此函数在进行如下分解时是必需的: 在测试时,永远不会调用存根,而是继续调用实际函数。但当我“正常”需要它时(即:不进行分解) 然后正确使用存根,一切正常 我感觉到这是因为析构是如何工作的,事实上存根是对象属性,而不是直接的函数。无论如何,如果你能给我提供一些见解,我将不胜感激!

  • 我正在用sinon和ava做测试。我正在清除一些函数,并检查这些函数是否被调用。我检查了控制台,函数正在被调用。但是sinon返回的是notCalled(。称为假)。下面是这段代码。 }; });