Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正在测试异步/等待方法。单元测试中的Jest未捕获异常_Javascript_Jestjs - Fatal编程技术网

Javascript 正在测试异步/等待方法。单元测试中的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

我正在尝试使用Jest测试一些使用
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
值)啊!我现在明白了。非常感谢。