Jest
Jest
skip,only,each修饰符
describe
与test
可以连接skip
,only
,each
修饰符。如describe.skip('something', testFunction)
,会在测试时跳过这一个describe
。only
会使测试只运行指定的测试用例,这在某个测试用例出错Debug时非常好用。each
修饰符可以执行多次参数不同的测试,它接受一个数组table
和一个测试函数,table
里的元素会作为参数传入测试函数。具体语法可以参见文档。
beforeAll,afterAll,beforeEach,afterAll钩子函数
Jest也支持在执行测试用例之前以及之后执行一些代码来做一些工作,像在测试前设置好测试数据、在测试后清理测试数据。这些工作可以作为beforeAll
、afterAll
、beforeEach
、afterAll
的回调函数。
断言
Jest支持expect
式的断言,像expect(1).toBe(1)
,其中toBe
就是断言部分。Jest支持很丰富的断言。
相等断言
断言两个基本类型的值相等使用expect(val1).toBe(val2)
。注意toBe
断言使用Object.is()
判断相等。它与==
以及===
都有不同。
如果要断言数组或者Object相等,使用toEqual
断言。它会递归地判断每个属性/元素是否是相等的。
如果要断言数组或者Object相等,使用toEqual
断言。它会递归地判断每个属性/元素是否是相等的。
toStrictEqual(value)
测试对象具有相同的类型和结构
和
.toEqual
不同在于:
- 检查具有未定义属性的键。 例如 使用.toStrictEqual时,{a:未定义,b:2}与{b:2}不匹配。
- 检查数组。 例如 使用.toStrictEqual时,[,1]与[undefined,1]不匹配
- 检查对象类型是否相等。 例如 具有字段a和b的类实例将不等于具有字段a和b的文字对象。
数字大小断言
1 | test('two plus two', () => { |
对于浮点数,不能使用toBe
或者toEqual
进行相等断言。Jest提供了toBeCloseTo
断言,可以在忽略一定误差的情况下,断言浮点数相等。
1 | test('adding floating point numbers', () => { |
真值断言(Truthiness)
toBeNull
用于null
toBeUndefined
用于undefined
toBeDefined
与toBeUndefined
相反toBeTruthy
用于值为 truetoBeFalsy
用于值为 false1
2
3
4
5
6test('null', () => {
const n = null;
expect(n).toBeNull();//pass
expect(n).toBeDefined();//pass
expect(n).toBeUndefined();// faild
});
字符串相关
Jest提供toMatch
断言被测试的字符串是否匹配给定正则表达式。
复制
1 | test('but there is a "stop" in Christoph', () => { |
数组
要断言数组中包含某个子项可以使用toContain
断言。
复制
1 | const shoppingList = [ |
抛出异常
要断言对函数的某些操作会抛出异常可以使用toThrow
断言。
复制
1 | test('throws on octopus', () => { |
not修饰符
not
修饰符可以把所有的断言反向,像expect(1).not.toBe(2)
。
Jest提供的断言不止上面提到那么多。常用到的还有像断言长度的toHaveLength
,断言对象有某个属性以及属性的值的toHaveProperty
。更多断言的可以参见Expect文档。