Не удалось получить ответ из теста Jest для функции async-await-try-catch - PullRequest
0 голосов
/ 26 апреля 2019

Я пишу простой шуточный тест для функции async-await, которая использует синтаксис стиля try-catch;

К сожалению, функция не возвращает ответ; Я знал, что мне не хватает чего-то очень глупого. Я мог бы использовать дополнительную пару глаз.

PS: большинство интернет-ресурсов сосредоточены на простом асинхронном ожидании, но не многие сосредотачиваются на асинхронном ожидании-попытке-улове; Следовательно, спрашиваю о SO.

async justAnotherAsyncAwait () {
    try {
        console.log(`inside async await`);
        return Promise.resolve('HIIII');
    } catch (error) {
        return Promise.reject(error);
    }
}

expect(justAnotherAsyncAwait()).resolves.toEqual('HIIII')

консоль читает inside async-await

Ответы [ 2 ]

0 голосов
/ 28 апреля 2019

resolves и rejects требуют, чтобы вы либо возвратили Promise:

test('justAnotherAsyncAwait', () => {
  // return the Promise
  return expect(justAnotherAsyncAwait()).resolves.toBe('HIIII');  // Success!
});

... или использовали async проверить функцию и вызвать await на Promise:

test('justAnotherAsyncAwait', async () => {  // <= async test function
  // await the Promise
  await expect(justAnotherAsyncAwait()).resolves.toBe('HIIII');  // Success!
});

Еще одно примечание:

async функция всегда возвращаетPromise и Promise, которые он возвращает, преобразуются в возвращаемое значение или отклоняются с Error, если выброшено Error, поэтому обычно вам не нужно использовать try / catch в функции asyncbody.

Вот простой пример:

const func = async (arg) => {
  if (arg === 'pass') {
    return 'HIIII';
  }
  throw new Error('something bad happened');
}

test('justAnotherAsyncAwait', async () => {
  await expect(func('pass')).resolves.toBe('HIIII');  // Success!
  await expect(func()).rejects.toThrow('something bad happened');  // Success!
});
0 голосов
/ 26 апреля 2019
const justAnotherAsyncAwait = async () => {
    try {
        console.log(`inside async await`);
        return  await Promise.resolve('HIIII');
    } catch (error) {
        return Promise.reject(error);
    }
}

describe('simple async await test', () => {
  it('resolve HIIII', () => {
    expect(justAnotherAsyncAwait()).resolves.toEqual('HIIII')
  });
});
...