Ich versuche, einen Code zu testen, der await
und async
mit Jest verwendet. Das Problem, das ich habe, ist eine Ausnahme, aber Jest scheint es nicht zu verstehen.Testen der async/await-Methode. Ausnahme wird nicht von Jest im Komponententest abgefangen
Zum Beispiel ist hier run
Methode, die überprüft, ob session.url
vorhanden ist. Wenn nicht, wird eine Ausnahme ausgelöst:
const args = require('args');
const fs = require('fs');
const { promisify } = require('util');
const readFile = promisify(fs.readFile);
// Loads JSON configuration file
module.exports.loadConfigFile = async (filename) => {
const contents = await readFile(filename, 'utf8');
return JSON.parse(contents);
};
// Prepare session ensuring command line flags override config
module.exports.prepareSession = async (flags) => {
if(!flags.config) return flags;
const config = await this.loadConfigFile(flags.config);
return {...config, ...flags};
};
// Runs the race application
module.exports.run = async (flags = {}) => {
const session = await this.prepareSession(flags);
if(!session.url) throw new Error('A valid URL is required');
};
Hier habe ich testen, ob eine Ausnahme ausgelöst wird:
describe('Race Module',() => {
test('Throws exception if no URL is provided', async() => {
const runner = await race.run();
expect(runner).toThrowError();
});
...
Der Test läuft und es scheint eine Ausnahme ausgelöst wird, aber Scherz es nicht gefangen hat und es geht nicht:
Race Module
✕ Throws exception if no URL is provided (3ms)
● Race Module › Throws exception if no URL is provided
A valid URL is required
at Object.<anonymous>.module.exports.run (src/race.js:23:27)
at <anonymous>
Irgendwelche Ideen, wo ich falsch liege?
Mein erster Gedanke war, catch(() => {})
zu race.run()
im Test zu ketten, aber ich bin nicht ganz sicher, wie ich das testen würde. Das könnte nicht einmal das Problem sein.
Die 'await' wirft die Ausnahme von dem Versprechen, dass' run() 'kehrt zurück. 'runner' wäre das Ergebnis des Versprechens (der' return' Wert deiner async Funktion) – Bergi
Ahhhh! Ich sehe jetzt. Vielen Dank. – BugHunterUK