推荐答案
在 Express 中,常用的测试框架包括:
- Mocha:一个功能丰富的 JavaScript 测试框架,支持异步测试和多种断言库。
- Jest:一个由 Facebook 开发的测试框架,内置了断言、mock 和覆盖率报告等功能。
- Supertest:一个专门用于测试 HTTP 服务器的库,通常与 Mocha 或 Jest 结合使用。
- Chai:一个断言库,可以与 Mocha 或 Jest 结合使用,提供多种断言风格。
- Ava:一个轻量级的测试框架,支持并发测试和简单的断言。
本题详细解读
Mocha
Mocha 是一个灵活的测试框架,允许开发者选择自己喜欢的断言库(如 Chai)和报告工具。它支持异步测试,非常适合测试 Express 应用中的路由和中间件。
// www.javascriptcn.com code example
const request = require('supertest');
const express = require('express');
const app = express();
app.get('/user', function(req, res) {
res.status(200).json({ name: 'john' });
});
describe('GET /user', function() {
it('responds with json', function(done) {
request(app)
.get('/user')
.set('Accept', 'application/json')
.expect('Content-Type', /json/)
.expect(200, done);
});
});Jest
Jest 是一个功能强大的测试框架,内置了断言、mock 和覆盖率报告等功能。它非常适合测试 Express 应用,尤其是与 Supertest 结合使用时。
// www.javascriptcn.com code example
const request = require('supertest');
const express = require('express');
const app = express();
app.get('/user', function(req, res) {
res.status(200).json({ name: 'john' });
});
test('GET /user responds with json', async () => {
const response = await request(app)
.get('/user')
.set('Accept', 'application/json');
expect(response.statusCode).toBe(200);
expect(response.body.name).toBe('john');
});Supertest
Supertest 是一个专门用于测试 HTTP 服务器的库,通常与 Mocha 或 Jest 结合使用。它提供了简单易用的 API 来发送 HTTP 请求并验证响应。
// www.javascriptcn.com code example
const request = require('supertest');
const express = require('express');
const app = express();
app.get('/user', function(req, res) {
res.status(200).json({ name: 'john' });
});
request(app)
.get('/user')
.expect('Content-Type', /json/)
.expect(200)
.end(function(err, res) {
if (err) throw err;
});Chai
Chai 是一个断言库,可以与 Mocha 或 Jest 结合使用。它提供了多种断言风格,如 expect、should 和 assert,使得测试代码更具可读性。
// www.javascriptcn.com code example
const chai = require('chai');
const expect = chai.expect;
describe('Array', function() {
describe('#indexOf()', function() {
it('should return -1 when the value is not present', function() {
expect([1, 2, 3].indexOf(4)).to.equal(-1);
});
});
});Ava
Ava 是一个轻量级的测试框架,支持并发测试和简单的断言。它非常适合测试 Express 应用中的小型模块或函数。
// www.javascriptcn.com code example
const test = require('ava');
const request = require('supertest');
const express = require('express');
const app = express();
app.get('/user', function(req, res) {
res.status(200).json({ name: 'john' });
});
test('GET /user responds with json', async t => {
const response = await request(app)
.get('/user')
.set('Accept', 'application/json');
t.is(response.statusCode, 200);
t.is(response.body.name, 'john');
});