javascript 中没有原生 expect,它来自 jest、vitest 等测试框架;需在对应测试环境中运行,否则报 referenceerror;基本用法为 expect(actual).matcher(expected),如 tobe、toequal、tobecloseto 等。

JavaScript 中没有原生的 expect 断言库,它来自测试框架(如 Jest、Vitest 或 Jasmine),不是独立的 JS 语法或内置 API。要验证函数输出是否正确,需先引入对应测试环境,再用 expect() 配合匹配器(如 .toBe()、.toEqual())做断言。
确保运行在支持 expect 的测试环境中
直接在浏览器控制台或 Node.js 普通脚本里写 expect(...).toBe(...) 会报错:ReferenceError: expect is not defined。必须满足以下任一条件:
- 使用 Jest:安装
jest,配置package.json的"test"脚本,并把测试文件放在__tests__目录或以.spec.js/.test.js结尾 - 使用 Vitest:安装
vitest,在vite.config.js中启用测试,用npm run test启动 - 不跑完整测试框架?可临时用简单断言替代,例如:
console.assert(sum(1,2) === 3, 'sum failed')
用 expect 验证函数返回值的基本写法
假设有一个加法函数:
将一个或多个视频上传至YouTube。当用户想“上传到YouTube”“发YouTube”“批量上传”“upload to YouTube”“post videos to YouTube”或发布到YouTube时使用此技能。
// math.js
export const add = (a, b) => a + b;
```
在测试文件中导入并断言:
```js// math.test.js
import { add } from './math.js';
test('add returns correct sum', () => {
expect(add(2, 3)).toBe(5); // 基本值比较(严格相等)
expect(add(-1, 1)).toBe(0); // 支持负数、零等边界值
expect(add(0.1, 0.2)).toBeCloseTo(0.3); // 浮点数用 toBeCloseTo 避免精度问题
});
```
常见匹配器与适用场景
不同输出类型需选对匹配器,否则容易误判:
-
.toBe(value):适合原始值(number、string、boolean、null、undefined),用===判断 -
.toEqual(value):适合对象、数组等引用类型,做“深度相等”比较(例如expect(func()).toEqual({ ok: true })) -
.toBeNull()/.toBeUndefined()/.toBeTruthy():语义化判断特殊值 -
.toThrow():验证函数是否抛出错误(如expect(() => parseJSON('invalid')).toThrow())
注意异步函数的断言方式
如果被测函数返回 Promise,不能直接 expect(fn()).toBe(...),必须 await 或用 resolves:
test('fetchUser returns user object', async () => {
const user = await fetchUser(123);
expect(user.name).toBe('Alice');
});
// 或用链式 resolves(更简洁)
test('fetchUser resolves to correct name', () => {
return expect(fetchUser(123)).resolves.toHaveProperty('name', 'Alice');
});
```










