【问题标题】: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);

以上都行不通。

【问题讨论】:

  • 你用什么 npm 进行测试?

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

【讨论】:

    猜你喜欢
    • 2019-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-02
    • 2018-11-21
    相关资源
    最近更新 更多