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

与析构一起使用的Sinon存根函数

容宏逸
2023-03-14

我希望在当前测试的文件中存根一个函数。此函数在进行如下分解时是必需的:

 const { theFunctionIWant } = require('path/to/module')

在测试时,永远不会调用存根,而是继续调用实际函数。但当我“正常”需要它时(即:不进行分解)

const myModule = require('path/to/module')

然后正确使用存根,一切正常

我感觉到这是因为析构是如何工作的,事实上sinon存根是对象属性,而不是直接的函数。无论如何,如果你能给我提供一些见解,我将不胜感激!

共有2个答案

戚奇略
2023-03-14

由于您的模块返回一个对象,MethodIwant是该对象的属性,因此您可以这样定义存根:

const myModule = require('path/to/module')
myModule.theMethodIwant = sinon.stub()
高寒
2023-03-14

当从从属模块中使用解构时,存根模块方法不起作用的原因非常简单,并且与绑定实际函数引用的时间有关。它与CommonJS模块、Sinon或节点本身没有任何关系,因此我将从简单的javascript示例开始。

const stub = (o, method) => (o[method] = () => "I am a stub");

const obj = {
  methodFoo() {
    return "I am foo";
  }
};

// same as doing `const methodFoo = obj.methodFoo;`
const { methodFoo } = obj; // "import" using destructuring

console.log("obj.methodFoo(): ", obj.methodFoo());
console.log("methodFoo()", methodFoo());

console.log("Stubbing out method!");
stub(obj, "methodFoo");

console.log("obj.methodFoo: ", obj.methodFoo());
console.log("methodFoo()", methodFoo());
 类似资料:
  • 问题内容: 我希望对我当前正在测试的文件中使用的函数存根。像这样的解构需要此函数: 测试时,永远不会调用存根,而是继续调用实函数。但是当我“正常”地要求它时(即:不破坏结构) 然后正确使用存根,一切正常 我感觉这是因为解构的工作原理以及直接对对象属性而不是对函数进行存根的事实。无论如何,如果您能为我提供一些见解,我将不胜感激! 问题答案: 使用从从属模块进行解构时,对模块的方法进行插桩的原因很简单

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

  • 所以我在用摩卡酵素Sinon测试React app。我试图用if语句测试一个函数,其中有一个对另一个函数的调用。我的目标是输入if语句,但是存根第二个函数调用。代码如下: 所以我想输入if语句,但不调用getUsers()函数。我该怎么做?我正在监视SearchChange(),如下所示: 期待听到,谢谢!

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

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

  • 我有一个redux操作,它有一个对API的异步调用。 我试图通过使用sinon存根来模拟fetchActionCreator方法。这是我的规范文件 但不知何故,这个函数并没有受到嘲弄。你能告诉我正确的方法吗。