Javascript 正在测试异步/等待方法。单元测试中的Jest未捕获异常
我正在尝试使用Jest测试一些使用Javascript 正在测试异步/等待方法。单元测试中的Jest未捕获异常,javascript,jestjs,Javascript,Jestjs,我正在尝试使用Jest测试一些使用await和async的代码。我遇到的问题是抛出了一个异常,但Jest似乎没有捕捉到它 例如,这里有一个run方法,用于检查是否存在session.url。如果不是,则引发异常: const args = require('args'); const fs = require('fs'); const { promisify } = require('util'); const readFile = promisify(fs.readFile); // Lo
await
和async
的代码。我遇到的问题是抛出了一个异常,但Jest似乎没有捕捉到它
例如,这里有一个run
方法,用于检查是否存在session.url
。如果不是,则引发异常:
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();
});
...
在这里,我测试是否引发异常:
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();
});
...
测试运行时,似乎抛出了异常,但jest未捕获该异常且未通过:
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>
Race模块
✕ 如果未提供URL,则引发异常(3ms)
● 竞赛模块›如果未提供URL,则引发异常
需要有效的URL
在Object..module.exports.run(src/race.js:23:27)
在
知道我哪里出错了吗
我最初的想法是在测试中将
catch(()=>{})链接到race.run()
,但我不完全确定如何测试它。这甚至可能不是问题。修复方法是使用拒绝。toThrow
。但是,请注意,此功能目前在master中被破坏。我不得不使用beta分支。请看这里:
修复方法是使用拒绝。toThrow
。但是,请注意,此功能目前在master中被破坏。我不得不使用beta分支。请看这里:
await
抛出来自run()
返回的承诺的异常runner
将是承诺的结果(异步函数的return
值)啊!我现在明白了。谢谢。wait
抛出了run()
返回的承诺中的异常runner
将是承诺的结果(异步函数的return
值)啊!我现在明白了。非常感谢。