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

如何使用chai或chai-as-promised for async函数测试抛出的错误?

chai和chai-as-promised是JavaScript的断言库,用于编写测试用例和断言。它们可以与Mocha等测试框架一起使用,用于测试异步函数中抛出的错误。

要使用chai和chai-as-promised进行异步函数测试,首先需要安装它们。可以使用npm或yarn进行安装:

代码语言:txt
复制
npm install chai chai-as-promised

安装完成后,在测试文件中引入chai和chai-as-promised:

代码语言:txt
复制
const chai = require('chai');
const chaiAsPromised = require('chai-as-promised');

chai.use(chaiAsPromised);
const expect = chai.expect;

接下来,可以编写测试用例来测试异步函数中抛出的错误。假设有一个异步函数asyncFunction,我们希望测试它是否会抛出特定的错误。

代码语言:txt
复制
async function asyncFunction() {
  throw new Error('Async error');
}

describe('Async function', () => {
  it('should throw an error', async () => {
    await expect(asyncFunction()).to.be.rejectedWith(Error, 'Async error');
  });
});

在上面的示例中,我们使用expect断言来测试asyncFunction是否会抛出一个Error对象,并且错误消息为'Async error'。to.be.rejectedWith是chai-as-promised提供的断言方法,用于测试Promise是否会被拒绝,并且拒绝的原因符合预期。

这样,当运行测试时,如果asyncFunction抛出了一个Error对象,并且错误消息为'Async error',测试将通过。如果抛出的错误与预期不符,测试将失败并显示相应的错误信息。

关于chai和chai-as-promised的更多用法和断言方法,请参考官方文档:

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

相关·内容

Nodejs中编写异步单元测试代码

在Nodejs开发过程中,异步这个话题是无论如何都躲不过去,关于异步文章已经有过许多篇了,我也不打算写在开发Web应用过程中,该如何在Nodejs中处理异步代码。...使用测试框架是Mocha,断言库是Chai,那么今天我们就来聊聊在单元测试中,处理异步代码各种姿势。 处理promise const { query } = require('...../app/utils/async-db'); const chai = require('chai'); const chaiAsPromised = require('chai-as-promised...'); chai.use(chaiAsPromised); chai.should(); /** * chai-as-promised简单使用 */ describe('Mysql connect...', function() { // 记得使用chai-as-promised时候 这里function不要加 done 参数 it('should return an array', function

1.4K10

测试框架 Mocha 实例教程

通过它,可以为JavaScript应用添加测试,从而保证代码质量。 本文全面介绍如何使用Mocha,让你轻松上手。如果你以前对测试一无所知,本文也可以当作JavaScript单元测试入门。...expect(add(1, 1)).to.be.equal(2); 所谓"断言",就是判断源码实际执行结果与预期结果是否一致,如果不一致就抛出一个错误。...两者之间使用toto.be连接。 如果expect断言不成立,就会抛出一个错误。事实上,只要不抛出错误测试用例就算通过。...it('1 加 1 应该等于 2', function() {}); 上面的这个测试用例,内部没有任何代码,由于没有抛出错误,所以还是会通过。...另一个例子beforeEach-async.test.js则是演示,如何在beforeEach之中使用异步操作。

2.3K50
  • Vue 测试速成班

    describe 函数表示围绕测试单元组织测试用例:测试单元可以是类、函数、组件等。Mocha 没有内置断言库,所以我们必须使用 Chai :它可以设置对结果期望。...Chai 有许多不同内置断言,但没有涵盖所有用例,缺失断言可以通过 Chai 插件系统导入。 大多数时候,你还将为组件层次结构之外业务逻辑编写单元测试,例如,状态管理后端 API 处理。...,我们必须使用 Vue 测试工具库中 shallowMount mount。...,从而检查整体是否能不抛出错误,正常运行: import Vuex from 'vuex'; import { createLocalVue } from '@vue/test-utils'; it(...如果我们不调用 use 方法,将会抛出一个错误。通过创建 Vue 局部副本,我们还可以避免污染全局对象。 我们可以通过 dispatch 方法改变 store。

    2.7K10

    用Hardhat和Ethers引入并测试知名NFT智能合约

    但是现在让我们以手动方式进行,如何使用代码来更有效获取合约代码,可以作为一个练习题 :) 就要完成了第 1 步 - 复制合约代码并将其保存在文件中 - 现在你可以将其放在记事本中将其保存在某个文件中...应用程序二进制接口[15],合约变量和函数 JSON 表示),这正是我们需要使用以太币以创建合约实例内容 ....不过,在我们这样做之前,将使用一个名为“beforeEach”辅助函数,它将简化每个测试设置,并允许为每个测试重用变量。...让我们为该函数编写一个测试,这将让我们尝试支付,并迫使我们使用合约中其他一些方法来使测试通过。...: 如何找到特定项目的智能合约代码 如何将该代码添加到本地开发环境 如何安装和设置一个简单安全帽开发环境 如何编译合约并为其编写测试 希望这能让你对使用 Hardhat、Ethers、Chai 和 Mocha

    1.1K30

    精读《JavaScript错误堆栈处理》

    如何使用堆栈追踪 该部分以 NodeJS 环境为例,讲解了 Error.captureStackTrace ,将 stack 信息作为属性存储在一个对象当中,同时可以过滤掉一些无用堆栈信息。...这样可以隐藏掉用户不需要了解内部细节。作者也以 Chai 为例,内部使用该方法对代码调用者屏蔽了不相关实现细节。...否则,无法知道抛出类型,很难对错误进行统一处理。...函数定义时应该用文档写清楚参数类型,及可能会发生合理失败。以及错误是同步还是异步传给调用者 缺少参数参数无效是程序员错误,一旦发生就应该 throw。...reject 如果使用 Error 对象,会导致捕获不到错误情况,在我博客中有讨论过这种情况:Callback Promise Generator Async-Await 和异常处理演进,我们看以下代码

    1.2K20

    精读JavaScript错误堆栈处理

    如何使用堆栈追踪 该部分以 NodeJS 环境为例,讲解了 Error.captureStackTrace,将 stack 信息作为属性存储在一个对象当中,同时可以过滤掉一些无用堆栈信息。...这样可以隐藏掉用户不需要了解内部细节。作者也以 Chai 为例,内部使用该方法对代码调用者屏蔽了不相关实现细节。...抛 Error 对象正确姿势 在我们日常开发中一定要抛出标准 Error 对象。否则,无法知道抛出类型,很难对错误进行统一处理。...函数定义时应该用文档写清楚参数类型,及可能会发生合理失败。以及错误是同步还是异步传给调用者 缺少参数参数无效是程序员错误,一旦发生就应该 throw。...reject 如果使用 Error 对象,会导致捕获不到错误情况,在我博客中有讨论过这种情况:Callback Promise Generator Async-Await 和异常处理演进,我们看以下代码

    2K30

    挑选 npm 模块很费事?掌握这些技巧就能事半功倍!

    Koa 更像是一个中间件层,不提供开箱即用模板路由,更适合 API 开发。 你想要开箱即用 async/await 支持。...实用程序 / 杂项: Lodash: 在需要 JS 实用程序库时使用。 你使用了大量 OOP。 Ramda: 你想用更加函数风格编程,用函数组合写代码时用它。...注意:它是和类似 Winston Bunyan 工具并用。由于它是中间件,所以知道如何处理请求并记录它,但不会像 Winston 和 Bunyan 那样负责传输到日志输出中。...测试 Mocha: 在需要编写和运行单元测试使用Chai: 你单元测试需要一个断言库时用它。 注意:它和 Mocha 是搭配使用。...Chai-as-promised: 你需要针对 promise 断言库,但不想用 then catch 时用它。 Sinon: 需要一个 mocking 库进行测试使用

    1.5K21

    前端测试驱动开发模式(TDD)快速入门

    官网:mochajs.org github: github.com/mochajs/moc… chai.js chai 主要提供了断言函数assert,用来断言和比较测试结果和代码执行结果。...) const assert = chai.assert // 从chai中引出assert 复制代码 如何实施TDD 如何写一个单元测试 首先我们看一个简单单元测试代码: describe('测试navigateTo...如何写多个单元测试代码: 直接在describe中加入多个it函数即可: describe('测试navigateTo方法',()=>{ it(`new router 后存在navigateTo...一般测试思路 可以先从最简单开始测试,比如存在某个方法,入参类型等等 最好是先写测试用例,再写业务代码 用尽量小成本实现测试 善用throw抛出错误 在执行代码中,特别在开始一些对入参判断代码...,可以使用throw出错误,再用assert捕获这个错误,这样可以比较方便测试入参是否符合预期。

    2.5K20

    使用mocha编写node服务单元测试

    null, '函数非法入参执行错误') }) }) 每一份单元测试脚本都应该至少包含一个describe模块,describe定义了一组逻辑相关测试组,第一个入参是测试名称,第二个入参是交给...可以看到上述代码定义了一个describe组来测试getResult函数功能,里面有两个测试用例分别测试了入参正常和非法入参情况。 而测试用例中如何来判断函数是否正常执行呢?...chai断言库 mocha可以搭配你喜欢任何断言库,经常使用chai断言库。 chai提供了多种风格语法去帮助我们判断函数执行结果。...我们也可以让替换函数主动抛出错误,来测试调用它函数是否可以正确处理异常: it('测试db操作失败', async function(){ const stub = sinon.stub(db,...') }) }); }); 总结 mocha本身是一个比较简单测试框架,在此基础上,我们使用一些npm包来加强我们测试过程: nyc: 提供全面的测试覆盖率 chai: 多种风格断言判断

    4K20

    认识一下断言和学会简单使用

    ,断言是兼容和排除开发者操作来,比如开发者觉得这一块不可以是什么,那么他为了程序可以避免这种我已经知道问题出现,就可以使用断言进行拦截和抛出异常。...如果你还是不理解,你可以简单理解为,开发者对自己已知错误但是避免这种错误一种调试手段!当然他可以用来写一些单元测试什么。...,将他们封装了起来,这样可以让我们在写时候直接用,里面的逻辑就是他函数名字,比如上面的notStrictEqual 不是严格相等,就是严格相等取反,=== 和 !...== 写法,再比如deepEqual 深度相等,就是两个对象不仅是key 相等,他value也是一样才算相等,类似这种功能我们自己写的话,是比较麻烦,所以这里是使用了一个断言库,我们需要一些功能函数...,chai里面会提供很多相似的功能供我们参考使用

    9210

    hardhat 教程及 hardhat-deploy 插件使用

    在本教程中,我们将使用 hardhat-deploy-ethers 和 hardhat-deploy 插件。它们将允许你与以太坊交互,并测试合约。后面我们会解释如何使用。...部署脚本 在能够测试部署合约之前,你需要设置部署脚本,以便在测试和准备部署时使用。部署脚本让你可以专注于合约最终形式,设置它们参数和依赖关系,并确保你测试是将要部署内容。...这些断言函数被称为 matchers,在这里使用函数实际上来自chai-ethers包(它本身就是Waffle chai matchers[17]一个 fork,没有不必要依赖)。...现在我们已经介绍了测试合约所需基础知识,这里有一个完整代币测试 Case,其中有很多关于 Mocha 附加信息以及如何构建测试。...但首先我们要添加一些实用函数,我们将在该测试套件中使用

    3.3K30

    前端单元测试总结_javascript单元测试

    通过编写测试用例,可以做到一次编写,多次运行 解释性:测试用例用于测试接口、模块重要性,那么在测试用例中就会涉及如何使用这些API。...3.单元测试技术实现原理 测试框架:判断内部是否存在异常,存在则console出对应text信息 断言库:当actual值与expect值不一样时,就抛出异常,供外部测试框架检测到,这就是为什么有些测试框架可以自由选择断言库原因...,只要可以抛出异常,外部测试框架就可以工作。...mock函数:创建一个新函数,用这个函数来取代原来函数,同时在这个新函数上添加一些额外属性,例如called、calledWithArguments等信息 function describe (...return proxy; } var proxy = spy(fn); // 得到一个mock函数 4.如何写单元测试用例 4.1原则 测试代码时,只考虑测试,不考虑内部实现 数据尽量模拟现实

    1.5K20

    小程序测试方案初探

    从微信小程序发布这段时间,陆陆续续开发了不少小程序相关项目,总结了一些通用性组件,但是对于小程序如何测试,依然是一头雾水,直到做了不少项目,积累一些经验和开源库之后才理清如何测试,下面将会介绍如何对小程序做...v6.4.0,但是因为官方示例中大量使用 async/await 等新特性,所以需要使用 v7.6.0 更高版本 Node,async/await能让异步回调代码更加简洁,不然整个代码都是promise.then...mocha JavaScript测试框架,在浏览器和Node环境都可以使用,通过测试框架,可以为你JavaScript代码添加相应测试用例,使得项目代码更加强健。..._238_1508486871762.gif] 结语 小程序其实也有上线一个云测试,但是我觉得有个不好地方,假如你小程序是依赖于后台CGI返回数据作为展示,那么你必须先上线CGI才能使用测试,...本篇文章介绍使用wept和puppeteer来对小程序做E2E测试,对于测试环境和正式环境还是有差异,比如Object.defineProperty小程序是不支持这个API,但是测试环境是可以跑通

    8.5K30

    Buidler 新手教程

    如果看到提到“ node-gyp”错误,请确保安装了前面提到构建工具。 如果你有旧版本Node.js,请参阅下一节。...这些断言函数称为“匹配器”,我们在此使用实际上来自Waffle[28]。这就是为什么我们使用buidler-waffle插件,这使得从以太坊上断言值变得更容易。...使用不同账号 如果你需要从默认帐户以外其他帐户(ethers.js 中 Signer)发送交易来测试代码,则可以在ethers.jsContract中使用connect()方法来将其连接到其他帐户...既然我们已经介绍了测试合约所需基础知识,一下是代币完整测试用例,其中包含有关Mocha以及如何构组织测试许多信息。...Buidler 前端模板项目 如果你想快速开始使用dApp使用前端查看整个项目,可以使用我们hackathon模板库[37]。

    2.6K10

    打造前端工程测试体系(1)

    引入自动化测试必要性 好处很多,包括减少错误、提高效率等,尤其是前端项目越来越庞大且多人维护时,前端自动化测试就会显得尤其重要。 代价也有,毕竟需要额外学习成本。.../add.js'); var expect = require('chai').expect; describe('加法函数测试', function () { it('1 加 1 应该等于...真实项目环境中,还有很多问题都需要解决,比如: 如何用 es6 语法来写测试用例? 如果代码中有 DOM 操作怎么测试如何在不同浏览器中进行测试使用 React 等框架时怎么测试?...依赖 Ajax 等场景时如何测试? ... 这些实际情况,我们会在接下来文章中继续讨论。...但至少根据这一章节内容,你已经可以去写一些纯函数测试用例了,比如传入一个时间戳然后输出自定义格式时间或日期。 赶紧试试吧!

    2.7K00

    写代码无BUG,网易云前端单元测试方案总结

    我希望通过对这些工具各自作用掌握,了解完整前端测试技术方案。前端单元测试领域也很多,这里主要讲对于前端组件如何进行单元测试,最后会主要介绍下对于 React 组件一些测试方法总结。...同时观察上面的输出可以发现,这个报告更像是程序错误报告,而不是一个单元测试报告。...chai chai BDD 风格使用 expect 函数作为语义起始,也是目前几乎所有 BDD 工具库都遵循风格。...: karma + mocha + chai + webpack + babel 一个测试流水线往往需要很多个工具搭配使用,配置起来比较繁琐,还有一些额外工具例如单元覆盖率(istanbul),函数...,而且支持功能更加清晰,不用考虑如何组合使用问题,而且下文介绍 jest 测试框架也是使用这种风格。

    9.6K20

    单元测试初体验

    断言库 Chai Chai 是一个针对 Node.js 和浏览器行为驱动测试测试驱动测试断言库,可与任何 JavaScript 测试框架集成。...你要使用测试框架列表。...// 如果该值为true,karma将会启动和捕获配置浏览器,运行测试然后退出,退出使用代码01取决于测试是成功还是失败。...sinon.js 中 spy 主要用来监视函数调用情况,sinon 对待监视函数进行 wrap 包装,因此可以通过它清楚知道,该函数被调用过几次,传入什么参数返回什么结果,甚至是抛出异常情况。...它拥有 spy 提供所有功能,区别在于它会完全替换掉目标函数,而不只是记录函数调用信息。换句话说,当使用 spy 时,原函数还会继续执行,但使用 stub 时就不会。

    1.6K20

    测试利器Mocha

    支持TDD/BDD 开发方式,结合 should.js/expect/chai/better-assert 断言库,能轻松构建各种风格测试用例。...mocha 允许开发者使用任意断言库,当这些断言库抛出了一个错误异常时,mocha将会捕获并进行相应处理。...以下是众所周知适用于Node.js浏览器断言库: should.js expect.js chai.js better-assert assert:nodejs 原生模块,在前文示例中我们有应用到...断言库 Chai 是一个非常灵活断言库,它可以让你使用如下三种主要断言方式任何一种: assert: 这是来自老派测试驱动开发经典assert方式。...时说:mocha支持TDD/BDD 开发方式,结合 should.js、expect、chai、better-assert 断言库,能轻松构建各种风格测试用例。

    1.4K20
    领券