Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么sinon存根返回未定义?_Javascript_Node.js_Sinon_Sinon Chai - Fatal编程技术网

Javascript 为什么sinon存根返回未定义?

Javascript 为什么sinon存根返回未定义?,javascript,node.js,sinon,sinon-chai,Javascript,Node.js,Sinon,Sinon Chai,我正在尝试用Sinon来存根一个库函数。抱歉,无法发布准确的代码,但它看起来像下面的代码 我正在尝试存根library.js的库 async function a(input) { // make some api calls here returns input; } export async function b { const output = await a(123); // do some magic here with output // ca

我正在尝试用Sinon来存根一个库函数。抱歉,无法发布准确的代码,但它看起来像下面的代码

我正在尝试存根library.js的库

async function a(input) {
    // make some api calls here
    returns input;
}
export async function b {
    const output = await a(123);
    // do some magic here with output
    // call again a
    returns a(output);
}
我的测试用例文件:sinon.js

import * as lib from 'library.js'

describe('', ()=>{
    it('', ()=>{
        sinon.stub(lib, 'b')
        .withArgs(123)
        .resolves(123)
    })
})

当我运行此代码时,我的存根返回
未定义
,而不是预期的输出,
123
有人能帮我找到我在这里做的错误吗?

我并不声称自己是这方面的专家,但在我看来,你是在尝试存根而不是模拟。试试这样的

describe('', () => {
  it('', () => {
    const mock = sinon.mock(lib);
    mock
      .expects('b').withArgs(123)
      .resolves(345);
    lib.b(123).then((c) => console.log(c));
  })
})

这将打印345。我很确定还有一种更优雅的方式,但这会奏效。

我并不声称自己是这方面的专家,但在我看来,你似乎在试图存根而不是嘲笑。试试这样的

describe('', () => {
  it('', () => {
    const mock = sinon.mock(lib);
    mock
      .expects('b').withArgs(123)
      .resolves(345);
    lib.b(123).then((c) => console.log(c));
  })
})

这将打印345。非常确定有一种更优雅的方法,但这会起作用。

你是说返回而不是返回吗?还有-我不知道sinon是什么-但在b()中,你似乎在等待对“a”的调用并获得“output”,但不是直接返回“output”,而是再次返回一个未等待的对“a”的调用。像这样两次调用“a”似乎有点奇怪,在这里你等待一次调用而不是另一次调用。@DavidZorychta在我用输出操作的实际代码中,然后再次调用
a
是递归函数吗?可能不是问题,但最好知道是否是。不,这不是一个递归函数@RuudVerhoefdo你的意思是返回而不是返回?还有-我不知道sinon是什么-但在b()中,你似乎在等待对“a”的调用并获得“output”,但不是直接返回“output”,而是再次返回一个未等待的对“a”的调用。像这样两次调用“a”似乎有点奇怪,在这里你等待一次调用而不是另一次调用。@DavidZorychta在我用输出操作的实际代码中,然后再次调用
a
是递归函数吗?可能不是问题,但最好知道是否是。不,它不是一个递归函数@RuudVerhoef