#javascript #node.js #async-await #sinon #stub
Вопрос:
У меня есть следующий код:
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);
})
ведение works
журнала регистрирует правильный буфер, но ведение 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
, но тест не проходит. Чего мне не хватает?
Ответ №1:
На самом деле, ваш способ получить works
это не то же самое, что breaks
. Способ получения ответа works
прост для понимания — дождитесь ответа myStubbedMethod
, затем получите первый пункт ответа.
Взгляните на то, как вы получаете breaks
:
const breaks = Buffer.from(await myStubbedService.myStubbedMethod()[0], 'hex');
(Возможно) как вы знаете myStubbedService.myStubbedMethod()
, возвращая a Promise
, когда вы получаете 0
атрибут обещания, вы возвращаете неопределенное значение.
await
с константой вы получаете константу.
Ваш код будет выглядеть следующим образом:
const breaks = Buffer.from(await undefined, 'hex');
Просто больше скобок:
const breaks = Buffer.from((await myStubbedService.myStubbedMethod())[0], 'hex');
Комментарии:
1. имеет смысл в холодном свете ретроспективы! Я думаю, что слишком долго смотрел на этот код. Еще раз спасибо!