如何使用 Mocha 测试异步代码

发布于 2022-08-02 12:39:41 字数 3047 浏览 249 评论 0

Mocha 测试框架 对异步测试有很好的支持。 一般来说,使用 Mocha 构建异步测试有 3 种方法:

在本教程中,您将学习如何使用这 3 个范例中的每一个编写 Mocha 测试。

设置

发出 HTTP 请求的异步函数 Axios

const axios = require('axios');

function get(url, cb) {
  return axios.get(url);
}

功能 get()接受一个参数,一个 URL,并返回一个 promise 。 让我们用 Mocha 来测试这个功能,3 种不同的方式。

异步函数

Mocha 支持开箱即用的异步功能 ,无需插件或配置。 您可以将 异步函数  给 it(),Mocha 将处理发生的任何错误。

describe('get()', function() {
  it('works', async function() {
    const res = await get('http://httpbin.org/get?answer=42');
    assert.equal(res.data.args.answer, 42);
  });
});

承诺

你可能会惊讶地发现 Mocha 从 2014 年开始就支持异步函数 。 异步函数是在 2017 年才引入的,但是异步函数会返回 Promise,而 Mocha 在 Promise 被正式引入 JavaScript 之前就已经支持了。

换句话说,如果您从您的 it() 功能,Mocha 将为您处理。

describe('get()', function() {
  it('works', function() {
    return get('http://httpbin.org/get?answer=42').
      then(res => assert.equal(res.data.args.answer, 42));
  });
});

回调使用 done()

基于回调的测试 Mocha 的 done() 功能 。 这种风格有点陈旧,因为 Promise 自 2015 年以来一直是 JavaScript 的一部分,自 2017 年以来一直是 async/await 的一部分,但你可能会在某个时候遇到它。

Mocha 检查您传递给的函数 it(),如果该函数接受一个参数,Mocha 假定该参数是 done() 您将调用以指示您的测试已完成的回调。 以下是您将如何测试 get() 使用 Mocha 的功能 done() 打回来。

describe('get()', function() {
  it('works', function(done) {
    get('http://httpbin.org/get?answer=42').
      then(res => {
        assert.equal(res.data.args.answer, 42);
        // `done()` with no parameters means the test succeeded
        done();
      }).
      // If you pass a parameter to `done()`, Mocha considers that an error
      catch(err => done(err));
  });
});

如果你打电话 done() 没有争论,你告诉 Mocha 你的测试成功了。 如果您传递参数,Mocha 会假定该参数是错误的。

确保你打电话 done()! 如果你不打电话 done(),您的 Mocha 测试将超时。 您将看到以下错误:

Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called

如果你看到这个错误,要么你需要 增加你的 Mocha 测试超时 的代码中有一些错误阻止了 done() 从被调用。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

睫毛溺水了

暂无简介

文章
评论
26 人气
更多

推荐作者

微信用户

文章 0 评论 0

小情绪

文章 0 评论 0

ゞ记忆︶ㄣ

文章 0 评论 0

笨死的猪

文章 0 评论 0

彭明超

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文