Sinon.stub.resolves returns 在 Buffer.from 内等待时未定义
Sinon.stub.resolves returns undefined when awaited within Buffer.from
我有以下代码:
describe('run()', () => {
const ret = ['returnValue'];
const expectedData = 'data';
beforeEach(() => {
sinon.stub(myStubbedService, 'myStubbedMethod').resolves(ret);
});
it('should not break', async () => {
const foo = myStubbedService.myStubbedMethod();
const bar = await myStubbedService.myStubbedMethod();
const works = Buffer.from(bar[0], 'hex');
console.log(works);
const breaks = Buffer.from(await myStubbedService.myStubbedMethod()[0], 'hex');
console.log(breaks);
})
logging works
记录正确的 Buffer 但 logging breaks
=>
TypeError [ERR_INVALID_ARG_TYPE]: The first argument must be of type string or an instance of Buffer, ArrayBuffer, or Array or an Array-like Object. Received undefined
我很确定 breaks
的代码与 works
的代码一样工作,但测试失败。我错过了什么?
其实你获得works
的方式和breaks
是不一样的。获取works
的方法很容易理解-等待myStubbedMethod
的响应,然后获取响应的第一项。
看看你得到的方式 breaks
:
const breaks = Buffer.from(await myStubbedService.myStubbedMethod()[0], 'hex');
(也许)如你所知 myStubbedService.myStubbedMethod()
return a Promise
,当你获得 Promise 的 0
属性时,你会得到一个未定义的值。
await
有了常数,就得到了常数。
您的代码将如下所示:
const breaks = Buffer.from(await undefined, 'hex');
只是更多的括号:
const breaks = Buffer.from((await myStubbedService.myStubbedMethod())[0], 'hex');
我有以下代码:
describe('run()', () => {
const ret = ['returnValue'];
const expectedData = 'data';
beforeEach(() => {
sinon.stub(myStubbedService, 'myStubbedMethod').resolves(ret);
});
it('should not break', async () => {
const foo = myStubbedService.myStubbedMethod();
const bar = await myStubbedService.myStubbedMethod();
const works = Buffer.from(bar[0], 'hex');
console.log(works);
const breaks = Buffer.from(await myStubbedService.myStubbedMethod()[0], 'hex');
console.log(breaks);
})
logging works
记录正确的 Buffer 但 logging breaks
=>
TypeError [ERR_INVALID_ARG_TYPE]: The first argument must be of type string or an instance of Buffer, ArrayBuffer, or Array or an Array-like Object. Received undefined
我很确定 breaks
的代码与 works
的代码一样工作,但测试失败。我错过了什么?
其实你获得works
的方式和breaks
是不一样的。获取works
的方法很容易理解-等待myStubbedMethod
的响应,然后获取响应的第一项。
看看你得到的方式 breaks
:
const breaks = Buffer.from(await myStubbedService.myStubbedMethod()[0], 'hex');
(也许)如你所知 myStubbedService.myStubbedMethod()
return a Promise
,当你获得 Promise 的 0
属性时,你会得到一个未定义的值。
await
有了常数,就得到了常数。
您的代码将如下所示:
const breaks = Buffer.from(await undefined, 'hex');
只是更多的括号:
const breaks = Buffer.from((await myStubbedService.myStubbedMethod())[0], 'hex');