首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在未处理的promise rejection中测试抛出

在未处理的 Promise rejection 中测试抛出异常的方法有以下几种:

  1. 使用 try-catch 块:在测试代码中,可以使用 try-catch 块来捕获未处理的 Promise rejection,并验证是否抛出了预期的异常。在 try 块中,可以编写代码触发 Promise rejection,然后在 catch 块中断言异常的类型和内容。例如:
代码语言:txt
复制
try {
  // 触发 Promise rejection
  await Promise.reject(new Error('Expected rejection'));
  // 断言不会执行到这里
  assert.fail('Promise rejection not thrown');
} catch (error) {
  // 断言异常类型和内容
  assert.strictEqual(error.message, 'Expected rejection');
}
  1. 使用 async 函数和 assert.rejects 方法:Node.js 提供了 assert.rejects 方法,可以方便地测试 Promise rejection。在测试代码中,可以使用 async 函数和 assert.rejects 方法来验证是否抛出了预期的异常。例如:
代码语言:txt
复制
// 使用 async 函数包装测试代码
async function test() {
  // 使用 assert.rejects 断言 Promise rejection
  await assert.rejects(
    // 触发 Promise rejection
    Promise.reject(new Error('Expected rejection')),
    // 断言异常类型和内容
    { message: 'Expected rejection' }
  );
}

// 执行测试函数
test().catch((error) => {
  // 捕获测试中的异常
  console.error(error);
  process.exit(1);
});
  1. 使用第三方库:除了上述方法,还可以使用一些第三方库来简化测试未处理的 Promise rejection。例如,chai-as-promised 是一个流行的断言库,可以方便地测试 Promise rejection。使用该库,可以通过链式调用 rejectedWith 方法来断言 Promise rejection 的类型和内容。例如:
代码语言:txt
复制
const { expect } = require('chai');
const chaiAsPromised = require('chai-as-promised');

// 使用 chai-as-promised 插件
chai.use(chaiAsPromised);

// 测试代码
it('should throw expected rejection', async () => {
  // 触发 Promise rejection,并断言异常类型和内容
  await expect(Promise.reject(new Error('Expected rejection')))
    .to.be.rejectedWith('Expected rejection');
});

以上是几种常见的方法来测试未处理的 Promise rejection。根据具体的测试框架和需求,可以选择适合的方法来验证代码中是否正确处理了 Promise rejection。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

NodeJS异步编程经验

在 Node.js 6.6.0 增加了一个特性:对 Promise 未处理 rejection 默认会输出 UnhandledPromiseRejectionWarning 提示 例如:test.js...中有如下代码: node test.js 执行: 另一种情况是直接在 Promise 抛出异常: 执行后也会有 UnhandledPromiseRejectionWarning 警告:...Promise API 中有 .catch() 这个方法,可以用来处理捕捉 rejection 进行处理 但是注意: 这个例子虽然用 .catch() 捕捉处理了 Promise ...rejection;但是注意在 err.message err 是未定义,代码执行时会抛出错误,由于没有后续处理,所以也会输出 UnhandledPromiseRejectionWarning...unhandledRejection 事件 在 node process 中有一个 unhandledRejection 事件,当没有对 Promise rejection 进行处理就会抛出这个事件

1.8K20

【JavaScript】 事件循环 —— 微任务 Microtask

规范[1] 中所述: 队列(queue)是先进先出:首先进入队列任务会首先运行。 只有在 JavaScript 引擎没有其它任务在运行时,才开始执行任务队列任务。...未处理 rejection 还记得 使用 promise 进行错误处理[2] 一章 unhandledrejection 事件吗?...现在,我们可以确切地看到 JavaScript 是如何发现未处理 rejection 。...如果一个 promise error 未被在微任务队列末尾进行处理,则会出现“未处理 rejection”。...但是现在我们知道了,当微任务队列任务都完成时,才会生成 unhandledrejection:引擎会检查 promise,如果 promise 任意一个出现 "rejected" 状态,unhandledrejection

48110
  • then, catch, finally如何影响返回Promise实例状态

    occurred, and the reason is: ', reason) }) 如果onFulfilled或onRejected抛出一个异常,那么.then返回Promise实例状态会变成...onRejected回调抛出了异常,那么.catch返回Promise实例状态也将变成rejected。...实例状态也取决于onFinally返回值是什么,以及onFinally是否抛出异常。...如果回调函数抛出了异常,那么.then, .catch或.finally返回Promise实例状态就是rejected,并且reason是所抛出异常对象e。...如何理解then抛出异常后会触发随后catch 由于.then会返回一个新Promise实例,而在.then回调抛出了异常,导致这个新Promise状态变成了rejected,而.catch正是用于处理这个新

    1.2K10

    何在keras添加自己优化器(adam等)

    2、找到keras在tensorflow下根目录 需要特别注意是找到keras在tensorflow下根目录而不是找到keras根目录。...一般来说,完成tensorflow以及keras配置后即可在tensorflow目录下python目录中找到keras目录,以GPU为例keras在tensorflow下根目录为C:\ProgramData...找到optimizers.pyadam等优化器类并在后面添加自己优化器类 以本文来说,我在第718行添加如下代码 @tf_export('keras.optimizers.adamsss') class...# 传入优化器名称: 默认参数将被采用 model.compile(loss=’mean_squared_error’, optimizer=’sgd’) 以上这篇如何在keras添加自己优化器...(adam等)就是小编分享给大家全部内容了,希望能给大家一个参考。

    45K30

    Node 脚本遭遇异常时如何安全退出

    在一些重要流程能够看到脚本身影: CI,用以测试、质量保障及部署等 Docker,用以构建镜像 Cron,用以定时任务 如果在这些重要流程脚本出错无法及时发现问题,将有可能引发更加隐蔽问题。...❞ exit code 代表一个进程返回码,通过系统调用 exit_group 来触发。在 POSIX ,0 代表正常返回码,1-255 代表异常返回码,一般主动抛出错误码都是 1。...1 throw new Error 与 Promise.reject 区别 以下是两段代码,第一段抛出一个异常,第二段 Promise.reject,两段代码都会如下打印出一段异常信息,那么两者有什么区别...在对上述两个测试用例使用 echo $? 查看 exit code,我们会发现 throw new Error() exit code 为 1,而 Promise.reject() 为 0。...(rejection id: 1) ❞ 根据提示,--unhandled-rejections=strict 将会把 Promise.reject 退出码设置为 1,并在将来 node 版本修正

    1.8K30

    异步函数异常处理及测试方法

    这是对它测试(使用Jest): ? 也可以从 ES6 抛出错误。在 Javascript 编写类时,我总会在构造函数输入意外值。下面是一个例子: ? 以下是该类测试: ?...测试确实通过了: ? 安排明明白白! 所以无论异常是从常规函数还是从类构造函数(或从方法)抛出,一切都会按照预期工作。 但是如果我想从异步函数抛出错误怎么办?...果然不出所料,异步方法返回了一个Promise rejection,从严格意义上来讲,并没有抛出什么东西。错误被包含在了Promise rejection。...被拒绝Promise将会在堆栈传播,除非你抓住(catch)它。 至于测试代码,应该这样写: ? 我们测试不能是普通异常,而是带有TypeErrorrejects。 现在测试通过了: ?...这就是它工作原理。 总结 最后总结一下: 从异步函数抛出错误不会是“普通异常”。 异步函数和异步方法总是返回一个Promise,无论是已解决还是被拒绝。

    3K30

    一个 Node 进程死亡与善后

    在一些重要流程能够看到脚本身影: CI,用以测试、质量保障及部署等 Cron,用以定时任务 Docker,用以构建镜像 如果在这些重要流程脚本出错无法及时发现问题,将有可能引发更加隐蔽问题。...在 POSIX ,0 代表正常返回码,1-255 代表异常返回码,在业务实践,一般主动抛出错误码都是 1。...52 未曾感知痛苦何在: throw new Error 与 Promise.reject 区别 以下是两段代码,第一段抛出一个异常,第二段 Promise.reject,两段代码都会如下打印出一段异常信息...= 1 }) 在构建镜像时,Node 也有关于异常解决方案建议: (node:1) UnhandledPromiseRejectionWarning: Unhandled promise rejection...(rejection id: 1) 根据提示,--unhandled-rejections=strict 将会把 Promise.reject 退出码设置为 1,并在将来 node 版本修正 Promise

    1.1K20

    你没有抓住 Promises 要点

    rejection 部分代码就像同步代码副本一样,在整个调用链,fulfillment 部分会执行,也会在某个时候被 rejection 中断,但是只有预先声明了 handler 才能处理它。...handler 抛出了异常:获取数据,然后再抛出异常 数据装填失败,rejection handler 返回了一个值:必须得用一个 catch 子句捕获异常并处理 数据装填失败,但是 rejection...如果你在某个 handler 里面写一个叫做 aFunctionThatDoesNotExist() 函数,你 promise 对象失败以后会抛出异常,接着你异常向上冒泡,外面最近一个 rejection...这个测试套件发布以后,promise 操作性和可理解性都有了进步。rsvp.js 发布其中一个目标就是要提供对 Promises/A 支持。...不过最棒是这个 Promises/A+组织开源项目,一个松耦合实现,用清晰测试完备方式呈现扩展了原有 Promises/A 规范,成为 Promises/A+规范。

    61810

    一文详聊前端异常原理

    TypeError TypeError 在对值进行不合理操作时会发生,比如试图对一个非函数类型值进行函数调用,或者引用 null 或 undefined 类型属性,那么引擎会抛出这种类型异常...断言 上文提到可预测,很容易联想到 Node 断言 assert,如果表达式不符合预期,就抛出一个错误。...会用于编写测试用例; 不过 ECMA 还没有类似的设计,感兴趣可以简单封装一个 assert 方法。...主要注意是,Promise catch 方法用于处理 rejected 状态,而非处理异常。Rejected 状态未处理的话会触发 Uncaught Rejection....来捕获接口状态 总结 本文详细讲解了 ECMA 8 种异常产生原理,涉及了 LHS&RHS、递归优化、ScriptError、finally、Promise 等知识点,希望在处理异常工作能给你带来帮助

    1.4K40

    JS原生引用类型解析7-Promise类型

    该函数有一个参数,即拒绝原因(the rejection reason)。 返回值: then方法返回一个Promise。...而它行为与then回调函数返回值有关: 如果then回调函数返回一个值,那么then返回Promise将会成为接受状态,并且将返回值作为接受状态回调函数参数值。...如果then回调函数抛出一个错误,那么then返回Promise将会成为拒绝状态,并且将抛出错误作为拒绝状态回调函数参数值。...如果调用 then Promise 状态(fulfillment 或 rejection)发生改变,但是 then 并没有关于这种状态回调函数,那么 then 将创建一个没有经过回调函数处理新...}); // 在异步函数抛出错误不会被catch捕获到 var p2 = new Promise(function(resolve, reject) { setTimeout(function

    1.3K10

    Vue项目处理错误上报如此简单

    Vue 应用错误(组件生命周期中错误、自定义事件处理函数内部错误、v-on DOM 监听器内部抛出错误),并且回调自带 info 参数也标记了这个错误大概是属于哪类,同时它还能处理返回...Promise错误,可以说是非常强大了,但是它也并非能处理所有的异常,否则文章写到这就该结束了 ~ 接下来我们测试一下。..._handled = true return ret.catch((e) => errorHandler(e, this, `捕获到了未处理Promise异常: (Promise..._handled = true return ret.catch((e) => errorHandler(e, this, `捕获到了未处理Promise异常: (Promise...本文介绍了如何简单地在 Vue 全局捕获异常错误,提升代码健壮性,且能避免在代码编写大量异常捕获块,同时也减少了出错时控制台大片飘红报警,收集错误可以帮助我们定位开发与测试阶段不易发现疑难杂症,

    1.4K21

    关于 JavaScript 错误处理最完整指南(下半部)

    , error, 和 throw 使用 Promise.reject 可以很方便抛出错误: Promise.reject(TypeError("Wrong type given, expected a...string")); 除了Promise.reject,我们也可以通过抛出异常来退出 Promise。...如果我们失败了,或者决定不捕获它,异常可以在堆栈自由冒泡。 使用 Promise 来处理定时器异常 使用定时器或事件无法捕获从回调引发异常。...在这一点上,我们可以: 简单把对象错误打出来 抛出错误 把错误传到另一个回调 我们可以抛出一个异常 const { readFile } = require("fs"); function readDataset...在JavaScript程序,可以通过多种方式来捕获异常。 同步代码异常是最容易捕获。相反,异步异常需要一些技巧来处理。

    2.3K20

    面试官:为什么Promise错误不能被trycatch?

    前言 之前我写过一篇文章,讨论了为什么async await错误可以被try catch,而setTimeout等api不能,有小伙伴提出之前面试被面试官问过为什么Promise错误不能try catch...异步处理在我们日常开发是很常见场景,在Promise出现之前,我们都是通过回调来处理异步代码结果,但是出现了一些问题: 回调地狱,在有多个异步逻辑存在依赖关系时,我们只能在回调里嵌套,这些深度嵌套代码让代码难以阅读和维护...如果p1变成了rejected,我们注册handler不会被调用,p2直接变成rejected,rejection reason就是p1rejection reason。...简单来说就是,它就像finally块一样,不能包含return,它可以抛出异常,但是不能返回新值。...如果允许异常向外抛出,那我们该怎么恢复后续Promise执行?比如Promise a出现异常了,异常向外抛出,外面是没办法改变Promise a数据

    1.5K30
    领券