Ожидаемая функция для выброса — не выбрасывает

#node.js #jestjs

#node.js #jestjs

Вопрос:

Я написал тест с использованием jest библиотеки. Этот тест является асинхронным.

Это мой тест:

 test('Should fail because of missing arguments in saving file', () => {
    expect(async () => {
        const awsTestStorage = new Storage({
            aws: {
                accessKeyId,
                secretAccessKey,
                bucketName: AWSS3BucketName,
            },
        });

        const filename = 'StorageModuleTestONLYAWS_WITHTHROW.txt';
    
        await awsTestStorage.saveFile(filename);
    }).toThrow();
});
 

Я не предоставил accessKeyId, secretAccessKey, AWSS3BucketName , потому что они являются частными, но я гарантирую, что они предусмотрены в моем коде.

Кроме того, я уверен, что функция .saveFile(filename) должна выдавать ошибку из-за моей реализации. Когда я запускаю набор тестов, я получаю сбой теста, потому что он не выдал никакой ошибки, хотя в моем тесте я ожидал, что он выдаст.

Я почти уверен, что это связано с моей плохой реализацией асинхронного теста, но я не могу понять почему.

Комментарии:

1.Асинхронные функции всегда возвращают обещания, поэтому они не выбрасывают — вам нужно expect(...).rejects... или сделать тестовую функцию самой async , чтобы вы могли expect(await ...).toThrow... . См. jestjs.io/docs/en/asynchronous .

2. Я получил сообщение об ошибке: expect(...).rejects is not a function @jonrsharpe

3. Это не функция, нет; вам нужно связать свои ожидания с этим. Посмотрите на примеры в связанных документах.