准备条件
以第1节教程的创建的目录和代码为基础进行讲解。如果没有看过第1节教程,请关注我,查看以往该系列的文章
在讲匹配器之前,我们先来将上节中index.test.js
中基础代码讲解一下
import { sum } from './index'
test('测试 sum', () => {
expect(sum(1, 2)).toBe(3)
})
test
方法我们称做测试用例,接收两个参数,第一个参数是测试的名称,第二个参数是个函数,在函数内可以写一些测试逻辑expect
顾名思义就是期望的意思,expect(sum(1, 2)).toBe(3)
意思就是期望这个sum(1, 2)
的返回值和3
相等,整体称做为断言toBe
就是一个匹配器,匹配expect的值是否和匹配器中的值相等,也就是我们今天要讲的主题
既然了解我们之前写的代码的意思了,我们就开始今天的主题 匹配器,这些匹配器可以复制到index.test.js
进行测试
为了不用每次都启用命令npm run test
,可以在package.json
中的test命令加上–watchAll,这样文件更改就可以自动重新测试
.toBe(value):匹配值,相当于===
const can = {
name: 'pamplemousse'
};
test('has a sophisticated name', () => {
expect(can.name).toBe('pamplemousse');
});
注意点:
- 不能用于测试浮点数比如
expect(0.1+0.2).toBe(0.3)
,如果需要这样测试,可以使用toBeCloseTo
- 不能用于引用类型的检查
.toEqual(value):匹配值,只匹配内容不匹配引用,可以用于引用类型的匹配
const can1 = {
flavor: 'grapefruit',
ounces: 12,
};
const can2 = {
flavor: 'grapefruit',
ounces: 12,
};
test('have all the same properties', () => {
expect(can1).toEqual(can2);
});
注意点:
- 不能用于两个抛出异常的匹配
.toBeNull():匹配null
function bloop() {
return null;
}
test('bloop returns null', () => {
expect(bloop()).toBeNull();
});
注意点:
- .toBeNull()和.toBe(null)的作用是一样的
.toBeUndefined():匹配undefined
test('test undefined', () => {
let name
let age = undefined
expect(name).toBeUndefined()
expect(age).toBeUndefined()
})
注意点:
- .toBeUnd