乐闻世界logo
搜索文章和话题

Jest 中有哪些测试匹配器(Matchers)?如何使用自定义匹配器?

2月21日 15:57

Jest 提供了多种测试匹配器(Matchers)来验证不同的条件:

相等性匹配器:

  • toBe(value):严格相等(===
  • toEqual(value):深度相等
  • toStrictEqual(value):严格深度相等(包括 undefined 属性)
  • toMatchObject(object):部分匹配对象

真值匹配器:

  • toBeNull():只匹配 null
  • toBeUndefined():只匹配 undefined
  • toBeDefined():非 undefined
  • toBeTruthy():真值
  • 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():错误快照

自定义匹配器:

javascript
expect.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 进行否定:

javascript
expect(value).not.toBe(42); expect(array).not.toContain('item');
标签:Jest