Javascript 为什么sinon存根返回未定义?
我正在尝试用Sinon来存根一个库函数。抱歉,无法发布准确的代码,但它看起来像下面的代码 我正在尝试存根library.js的库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
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