Jest

Jest

skip,only,each修饰符

describetest可以连接skiponlyeach修饰符。如describe.skip('something', testFunction),会在测试时跳过这一个describeonly会使测试只运行指定的测试用例,这在某个测试用例出错Debug时非常好用。each修饰符可以执行多次参数不同的测试,它接受一个数组table和一个测试函数,table里的元素会作为参数传入测试函数。具体语法可以参见文档

beforeAll,afterAll,beforeEach,afterAll钩子函数

Jest也支持在执行测试用例之前以及之后执行一些代码来做一些工作,像在测试前设置好测试数据、在测试后清理测试数据。这些工作可以作为beforeAllafterAllbeforeEachafterAll的回调函数。

断言

Jest支持expect式的断言,像expect(1).toBe(1),其中toBe就是断言部分。Jest支持很丰富的断言。

相等断言

断言两个基本类型的值相等使用expect(val1).toBe(val2)。注意toBe断言使用Object.is()判断相等。它与==以及===都有不同。

如果要断言数组或者Object相等,使用toEqual断言。它会递归地判断每个属性/元素是否是相等的。

如果要断言数组或者Object相等,使用toEqual断言。它会递归地判断每个属性/元素是否是相等的。

toStrictEqual(value)

测试对象具有相同的类型和结构

.toEqual不同在于:

  1. 检查具有未定义属性的键。 例如 使用.toStrictEqual时,{a:未定义,b:2}与{b:2}不匹配。
  2. 检查数组。 例如 使用.toStrictEqual时,[,1]与[undefined,1]不匹配
  3. 检查对象类型是否相等。 例如 具有字段a和b的类实例将不等于具有字段a和b的文字对象。
数字大小断言
1
2
3
4
5
6
7
8
9
10
11
test('two plus two', () => {
const value = 2 + 2;
expect(value).toBeGreaterThan(3);//大于
expect(value).toBeGreaterThanOrEqual(3.5);//大于等于
expect(value).toBeLessThan(5);//小于
expect(value).toBeLessThanOrEqual(4.5);//小于等于

//等于
expect(value).toBe(4);
expect(value).toEqual(4);
});

对于浮点数,不能使用toBe或者toEqual进行相等断言。Jest提供了toBeCloseTo断言,可以在忽略一定误差的情况下,断言浮点数相等。

1
2
3
4
5
test('adding floating point numbers', () => {
const value = 0.1 + 0.2;
//expect(value).toBe(0.3); This won't work because of rounding error
expect(value).toBeCloseTo(0.3); // This works.
});
真值断言(Truthiness)
  • toBeNull 用于 null

  • toBeUndefined 用于undefined

  • toBeDefinedtoBeUndefined 相反

  • toBeTruthy 用于值为 true

  • toBeFalsy 用于值为 false

    1
    2
    3
    4
    5
    6
    test('null', () => {
    const n = null;
    expect(n).toBeNull();//pass
    expect(n).toBeDefined();//pass
    expect(n).toBeUndefined();// faild
    });
字符串相关

Jest提供toMatch断言被测试的字符串是否匹配给定正则表达式。

复制

1
2
3
test('but there is a "stop" in Christoph', () => {
expect('Christoph').toMatch(/stop/) // pass
});
数组

要断言数组中包含某个子项可以使用toContain断言。

复制

1
2
3
4
5
6
7
8
9
10
11
const shoppingList = [
'diapers',
'kleenex',
'trash bags',
'paper towels',
'beer',
];

test('购物清单(shopping list)里面有啤酒(beer)', () => {
expect(shoppingList).toContain('beer');
});
抛出异常

要断言对函数的某些操作会抛出异常可以使用toThrow断言。

复制

1
2
3
4
5
test('throws on octopus', () => {
expect(() => {
drinkFlavor('octopus');
}).toThrow();
});
not修饰符

not修饰符可以把所有的断言反向,像expect(1).not.toBe(2)

Jest提供的断言不止上面提到那么多。常用到的还有像断言长度的toHaveLength,断言对象有某个属性以及属性的值的toHaveProperty。更多断言的可以参见Expect文档