如何使用 Mocha 测试异步代码
Mocha 测试框架 对异步测试有很好的支持。 一般来说,使用 Mocha 构建异步测试有 3 种方法:
- async/await
- promise chaining
- callbacks
在本教程中,您将学习如何使用这 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 技术交流群。
上一篇: Webpack 开发服务器简介
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论