1. 准备测试环境
在Debian系统上测试Node.js应用前,需先安装Node.js和npm(Node.js包管理器)。推荐通过NodeSource存储库安装指定版本(如16.x),以确保兼容性:
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt-get install -y nodejs
安装完成后,通过node -v和npm -v验证安装是否成功。
2. 选择测试框架与工具
Node.js生态中有多种测试框架可供选择,常用的是Jest(适合单元测试与集成测试,内置断言库)和Mocha(灵活灵活,需搭配断言库使用):
ts-jest用于TypeScript项目):npm install --save-dev jest @types/jest ts-jest
chai,用于更直观的断言):npm install --save-dev mocha chai @types/mocha @types/chai
根据项目需求选择框架,Jest适合快速上手,Mocha适合需要高度自定义的场景。
3. 编写测试用例
测试用例需存放在项目根目录的__tests__文件夹(Jest默认识别)或test文件夹(Mocha默认识别),文件名以.test.js或.spec.js结尾:
sum.js模块):sum.js内容为module.exports = (a, b) => a + b;,则测试文件sum.test.js可写为:
const sum = require('../sum');
test('adds 1 + 2 to equal 3', () => {
expect(sum(1, 2)).toBe(3);
});
const { expect } = require('chai');
const sum = require('../sum');
describe('sum function', () => {
it('should return the sum of two numbers', () => {
expect(sum(1, 2)).to.equal(3);
});
});
supertest库(需安装:npm install --save-dev supertest)测试Express接口:const request = require('supertest');
const app = require('../app'); // Express应用入口
describe('GET /api/data', () => {
it('responds with JSON data', async () => {
const response = await request(app).get('/api/data');
expect(response.status).to.equal(200);
expect(response.body).to.have.property('message');
});
});
测试用例需覆盖正常场景、异常场景(如输入非法值、接口报错)等,确保代码健壮性。
4. 运行测试
npx jest
可添加--watch参数实现文件变更自动重新测试:npx jest --watch
npx运行test目录下的所有.test.js文件:npx mocha test/*.test.js
或在package.json中添加test脚本,简化命令:"scripts": {
"test": "mocha test/*.test.js"
}
运行npm test即可执行测试。5. 集成到CI/CD流程
将测试集成到持续集成/持续部署(CI/CD)管道中,确保每次代码提交都自动运行测试。以GitHub Actions为例:
.github/workflows/node.js.yml文件,配置如下:name: Node.js CI
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [14.x, 16.x, 18.x] # 测试多个Node.js版本
steps:
- uses: actions/checkout@v2
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v2
with:
node-version: ${{ matrix.node-version }}
- run: npm ci # 安装依赖(使用package-lock.json确保一致性)
- run: npm test # 运行测试
每次推送到main分支或发起Pull Request时,GitHub Actions会自动触发测试,确保代码兼容不同Node.js版本。6. 性能测试(可选)
除单元测试外,还需进行性能测试,确保应用在高并发场景下的稳定性:
autocannon进行压力测试:autocannon(Node.js压力测试工具):npm install -g autocannon
运行测试(模拟100个并发连接,持续5秒):autocannon -c 100 -d 5 http://localhost:3000/api/data
结果会显示请求延迟、吞吐量等指标,帮助优化性能。