gpt4 book ai didi

javascript - 如何使用 Mocha+Chai 编写测试以期望 setTimeout 出现异常?

转载 作者:行者123 更新时间:2023-11-28 10:42:43 24 4
gpt4 key购买 nike

我有以下内容:

it('invalid use', () => {
Matcher(1).case(1, () => {});
});

case 方法应该在一段延迟后抛出,我如何为 Mocha/Chai 描述它,这就是我想要的 - 测试应该通过(并且在未抛出异常时不得通过) ?

考虑case方法不受限制,它无法更改。

出于测试目的,它应该相当于:

it('setTimeout throw', _ => {
setTimeout(() => { throw new Error(); }, 1); // this is given, cannot be modified
});

我尝试过:

it('invalid use', done => {
Matcher(1).case(1, () => {});
// calls done callback after 'case' may throw
setTimeout(() => done(), MatcherConfig.execCheckTimeout + 10);
});

但这并没有真正帮助我,因为测试行为完全恢复了 - 当没有抛出 case (setTimeout) 的异常时,它会通过(应该会失败)当抛出异常时,测试失败(应该成功)。

我在某处读到有人提到全局错误处理程序,但如果可能的话,我想使用 Mocha 和/或 Chai 干净地解决这个问题(我猜 Mocha 已经以某种方式使用它了)。

最佳答案

您无法在异步回调中处理异常,例如请参阅Handle error from setTimeout 。这与 ECMAScript 使用的执行模型有关。我认为捕获它的唯一方法实际上是采用一些特定于环境的全局错误处理,例如Node.js 中的 process.on('uncaughtException', ...)

但是,如果您将函数转换为 Promises,则可以使用 Chai 插件 chai-as-promsied 轻松测试它。 :

import * as chai from 'chai';

import chaiAsPromised = require('chai-as-promised');
chai.use(chaiAsPromised);
const expect = chai.expect;

it('invalid use', async () => {
await expect(Matcher(1).case(1, () => {})).to.eventually.be.rejected;
});

关于javascript - 如何使用 Mocha+Chai 编写测试以期望 setTimeout 出现异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49345639/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com