Jest 提供了多种测试匹配器(Matchers)来验证不同的条件:
相等性匹配器:
toBe(value):严格相等(===)toEqual(value):深度相等toStrictEqual(value):严格深度相等(包括 undefined 属性)toMatchObject(object):部分匹配对象
真值匹配器:
toBeNull():只匹配 nulltoBeUndefined():只匹配 undefinedtoBeDefined():非 undefinedtoBeTruthy():真值toBeFalsy():假值
数字匹配器:
toBeGreaterThan(number):大于toBeGreaterThanOrEqual(number):大于等于toBeLessThan(number):小于toBeLessThanOrEqual(number):小于等于toBeCloseTo(number, precision):浮点数近似相等
字符串匹配器:
toMatch(regexp | string):匹配正则或字符串toContain(item):包含元素或子字符串
数组匹配器:
toContain(item):包含元素toContainEqual(item):包含相等元素toHaveLength(number):数组长度toBeArray():是数组
对象匹配器:
toHaveProperty(keyPath, value):有特定属性toMatchObject(object):部分匹配对象
函数匹配器:
toHaveBeenCalled():被调用toHaveBeenCalledWith(...args):用特定参数调用toHaveBeenCalledTimes(n):调用次数toHaveReturned():返回值toHaveReturnedWith(value):返回特定值
异常匹配器:
toThrow(error?):抛出错误toThrowErrorMatchingSnapshot():错误快照
自定义匹配器:
javascriptexpect.extend({ toBeWithinRange(received, floor, ceiling) { const pass = received >= floor && received <= ceiling; return { pass, message: () => pass ? `expected ${received} not to be within range ${floor}-${ceiling}` : `expected ${received} to be within range ${floor}-${ceiling}` }; } }); test('number within range', () => { expect(100).toBeWithinRange(90, 110); });
否定匹配器:
所有匹配器都可以使用 .not 进行否定:
javascriptexpect(value).not.toBe(42); expect(array).not.toContain('item');