await
とasync
を使用してJestを使用しているコードをテストしようとしています。私が持っている問題は、例外がスローされますが、Jestはそれをキャッチしていないようです。非同期/待機メソッドのテスト。ユニットテストでJestが例外を捕捉しない
たとえば、ここにsession.url
が存在するかどうかを確認する方法は、run
です。ない場合は、例外がスローされます。
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');
};
私は例外がスローされたかどうかをテスト:テストの実行
describe('Race Module',() => {
test('Throws exception if no URL is provided', async() => {
const runner = await race.run();
expect(runner).toThrowError();
});
...
、例外がスローされますが、冗談はそれをキャッチしていない表示されますそれは合格しません:
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>
私は間違っていますか?
私の初期の考えは、catch(() => {})
をrace.run()
にチェーンすることでしたが、私はそれをどのようにテストするのか完全にはわかりません。それは問題ではないかもしれません。
'await'は' run() 'が返す約束事から例外をスローします。 'runner'は約束の結果(非同期関数の' return'値)です。 – Bergi
Ahhhh!私は今参照してください。ありがとうございました。 – BugHunterUK