【问题标题】:Write a test for a asynchronous function throwing an error为抛出错误的异步函数编写测试
【发布时间】:2017-01-20 02:45:50
【问题描述】:
这行得通:
const err = new exceptions.InvalidCredentialsError('');
const fn = function () { throw err; };
expect(fn).to.throw(err);
如何为异步函数编写测试?
const err = new exceptions.InvalidCredentialsError('');
const fn = async function () { throw err; };
expect(fn).to.throw(err);
以上都行不通。
【问题讨论】:
标签:
javascript
node.js
chai
【解决方案1】:
使用async 定义的函数在调用时返回Promise。有一个名为 Chai as Promised 的 Chai 插件,您可以使用它来测试您的功能。
按照npm 的承诺安装 Chai:
$ npm install chai-as-promised --save-dev
将其插入 Chai:
var chai = require('chai');
var chaiAsPromised = require('chai-as-promised');
chai.use(chaiAsPromised);
var expect = chai.expect;
然后为您的异步函数编写一个测试。如果您的测试环境允许您从测试中返回 Promise(如 Mocha),则执行以下操作:
const err = new exceptions.InvalidCredentialsError('');
const fn = async function () { throw err; };
return expect(fn()).to.be.rejectedWith(err);
如果您的测试环境不允许您返回 Promise,请改为执行以下操作:
const err = new exceptions.InvalidCredentialsError('');
const fn = async function () { throw err; };
expect(fn()).to.be.rejectedWith(err).notify(done); // where `done` is the callback
请注意,函数的返回值(Promise)被传递给expect(),而不是函数本身。