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');