AVA 单元测试入门指南
AVA 是快速简洁的 JavaScript 测试运行器:并发执行、隔离环境、内置断言与快照。本文从项目搭建、第一个测试、多用例、筛选执行到异步测试与 mock 全覆盖。
本文依据官方文档整理,未执行运行验证或性能基准。代码片段展示局部用法,业务函数、数据和环境需按项目补齐;版本与配置以所引文档为准。
直接回答:AVA 是主打速度与简洁的 JS 测试运行器——测试文件内用例默认并发执行(但同文件中的共享状态仍可能互相影响),test() 注册用例、内置 t.is/t.deepEqual/throwsAsync 断言,.only/.skip 控制执行范围,支持异步与快照。Node 版本须符合所安装 AVA 版本的 engines 要求。
搭建与第一个测试
npm init -y
npm pkg set type=module
npm install --save-dev ava
// test.js
import test from 'ava';
test('加法正确', t => {
t.is(1 + 2, 3);
});
package.json 加 "test": "ava",npm test 即跑。
多用例与筛选执行
test('用例A', t => { ... });
test('用例B', t => { ... });
test.only('只跑这个', t => { ... }); // 调试期聚焦
test.skip('暂时跳过', t => { ... });
npx ava test.js 跑指定文件;npx ava --match='*登录*' 按标题匹配。
异步与 mock
test('接口返回用户', async t => {
const user = await fetchUser(1);
t.is(user.name, '张三');
});
test('抛错验证', async t => {
await t.throwsAsync(() => fetchUser(-1));
});
mock 搭配 sinon 或手写桩——AVA 自身专注运行与断言,mock 生态自由组合。
常见问题(FAQ)
Q:AVA 和 Jest/Vitest 怎么选?
A:AVA 胜在并发隔离与简洁 API;Jest 集成了(快照/mock 全家桶);Vitest 与 Vite 项目天生一体。Vite 项目可优先评估 Vitest;纯 Node 库可按并发模型和所需插件评估 AVA。
Q:并发执行导致用例间干扰?
A:默认隔离的是测试文件(worker thread,可配置独立进程),不是同一文件中的每条用例。文件内并发测试不要修改共享变量;必要时 test.serial,数据库仍须独立资源。
Q:TypeScript 支持?
A:按 AVA 官方 TypeScript 配置选择预编译或兼容的加载方式;tsconfig 本身不是执行器,且运行测试不等于完成类型检查。
官方参考
资料核对日期:2026-09-29。