javascript - 测试异步/等待方法。 Jest 在单元测试中未捕获异常

标签 javascript jestjs

我正在尝试使用 Jest 测试一些使用 awaitasync 的代码。我遇到的问题是抛出了异常,但 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();
  });

  ...

测试运行,似乎抛出了异常,但 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>

有什么想法我哪里出错了吗?

我最初的想法是在测试中将 catch(() => {}) 链接到 race.run() 但我不完全确定我会如何测试一下。这甚至可能不是问题。

最佳答案

修复方法是使用rejects.toThrow。但是,请注意,此功能目前在 master 中已损坏。我必须使用测试分支。参见这里:https://github.com/facebook/jest/pull/4884

test('Throws exception if no URL is provided', async () => {
    await expect(race.run())
      .rejects
      .toThrow('A valid URL is required');
});

关于javascript - 测试异步/等待方法。 Jest 在单元测试中未捕获异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47472682/

相关文章:

javascript - 在 DropDown 的更改事件中执行提交时如何禁用验证

javascript - VBA拦截Internet Explorer链接点击

javascript - moment.js isAfter 性能

javascript - ESLint 无法识别 node.js 的 'global' 对象

react-native - 部分模拟 `react-native` 模块

javascript - 如何使用 Greasemonkey 设计 XML 片段的样式?

reactjs - 使用 Jest 测试处理 webpack 加载程序语法 : exclamation raw-loader

javascript - 如何模拟非异步方法以使用 Jest 抛出异常?

javascript - 尝试测试 create-react-app 项目时出现 "ReferenceError: document is not defined"

javascript - 用于复选框上 ng-indeterminate 属性的 AngularJS 自定义指令