为抛出错误的异步函数编写测试

时间:2017-01-18 10:22:44

标签: javascript node.js chai

这有效:

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);

上述方法无效。

1 个答案:

答案 0 :(得分:1)

使用async定义的函数在调用时返回Promise。有一个名为Chai as Promised的Chai插件,您可以使用它来测试您的功能。

按照npm的承诺安装Chai:

$ npm install chai-as-promised --save-dev

将它插入柴:

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(),而不是函数本身。