很多时候用Jest,仅仅是想匹配一个对象的部分,或者测试数组的子集。这种情况下就可以用Jest的部分匹配功能。

文章包括:

  1. 利用Jest的 objectContaining 匹配对象的键值对
  2. 利用Jest的 arrayContaining 匹配数组包括的值
  3. 如何在Jest的 toHaveBeenCalledWith 利用部分匹配功能

用 Jest 的 objectContaining 进行部分匹配

当你想测试对象的子集或者指定的键值对是,你可以使用 objectContaining 匹配器。

test('should contain important value in object', () => {
  const object = {
    important: 'important',
    ignore: 'ignore',
  expect(object).toEqual(
    expect.objectContaining({
      important: 'important',

当对象包含键值对 important: 'important' 的时候,测试就会通过。

嵌套对象的部分匹配

当你尝试寻找嵌套对象中的一个键值对,你是可以嵌套使用 objectContaining 的。

test('should contain important value in nested object', () => {
  const nestedObject = {
    ignore: 'ignore',
    payload: {
      important: 'important',
      ignore: 'ignore',
  expect(nestedObject).toEqual(
    expect.objectContaining({
      payload: expect.objectContaining({
        important: 'important',
      }),

用 Jest 的 arrayContaining 对数组部分匹配

你可能对数组中指定的数据更感兴趣。这种情况下,你可以利用 arrayContaing 对数组部分匹配。

test('should contain important value in array', () => {
  const array = ['ignore', 'important']
  expect(array).toEqual(expect.arrayContaining(['important']))

当数组包括字符串数值 'important' 时,这个测试就会通过。

匹配没有顺序的数组

arrayContaining 匹配器工作起来是忽略顺序的。

test('should contain important values in array, in any order', () => {
  const array = [
    'ignore',
    'important',
    'alsoImportant',
    'veryImportant',
    'veryVeryImportant',
  expect(array).toEqual(
    expect.arrayContaining([
      'veryVeryImportant',
      'veryImportant',
      'alsoImportant',
      'important',

如果你想全集匹配一个数组,这时候通过添加一个长度判断即可。

test('should contain only the important values in array, in any order', () => {
  const array = ['important', 'alsoImportant', 'veryImportant']
  expect(array).toEqual(
    expect.arrayContaining(['veryImportant', 'alsoImportant', 'important'])
  expect(array).toHaveLength(3)

在对象数组中部分匹配

在对象数组中,我们可以组合使用Jest的 arrayContainingobjectContaining。这时候我们可以断言一个存在于数组中的特定对象(甚至可以是这个对象的一部分)。

test('should contain important objects in array', () => {
  const array = [
      important: 'important',
      ignore: 'ignore',
      ignore: 'ignore',
  expect(array).toEqual(
    expect.arrayContaining([
      expect.objectContaining({ important: 'important' }),

用 Jest 的 toHaveBeenCalledWith 匹配函数调用参数

我们可以利用 toHaveBeenCalledWith 匹配函数调用的参数。如果你只关注一部分参数,你可以用 expect.anything() 来替代其他参数。

test('should have been called with specific argument', () => {
  const mockFunction = jest.fn()
  mockFunction('ignore', 'ignore', 'important')
  expect(mockFunction).toHaveBeenCalledWith(
    expect.anything(),
    expect.anything(),
    'important'

如果你想匹配更精确的参数类型,那么只要用 expect.any() 加上参数类型即可,例如 String 或者 Object。

mockFunction({ ignore: 'ignore' }, 'ignore', 'important')
expect(mockFunction).toHaveBeenCalledWith(
  expect.any(Object),
  expect.any(String),
  'important'
  • 原文:https://www.emgoto.com/jest-partial-match/
  • Jest断言方法列表:https://jestjs.io/docs/expect
  • toMatch: https://jestjs.io/docs/expect#tomatchregexp–string
  • toMatchObject: https://jestjs.io/docs/expect#tomatchobjectobject
很多时候用Jest,仅仅是想匹配一个对象的部分,或者测试数组的子集。这种情况下就可以用Jest的部分匹配功能。文章包括:利用Jest的objectContaining匹配对象的键值对利用Jest的arrayContaining匹配数组包括的值如何在Jest的toHaveBeenCalledWith利用部分匹配功能用 Jest 的 objectContaining 进行部分匹配当你想测试对象的子集或者指定的键值对是,你可以使用 objectContaining 匹配器。test('shoul 开玩笑的部分匹配jest-partial断言, provided对象是一个子集expected 。 我们并非总是要验证已给定的整个对象。 我们通常只想保护我们需要的属性,而忽略其他所有内容。 使用npm: npm install --save-dev jest-partial yarn add -D jest-partial 笑话> v24 将jest-partial添加到您的Jest setupFilesAfterEnv配置中。 " jest " : { " setupFilesAfterEnv " : [ " jest-partial " ] 笑话<v23 " jest " : { " setupTestFrameworkScriptFile " : " jest-partial " 如果您已经在使用其他测试框架(例如
Jest测试生成器已经是相当成熟了,Mocha相比各有优势,对于初学者来说,建议选用Jest,在项目中引用Jest,配置相当简单。 但是Jest官方文档里的断言类型实在太多了,罗列出来常用的几种断言类型,供大家参考,如果想要看全集,请移步到Jest官网。 not: 类似于 ! 取反 expect(2).not.toBe(1) toBe:类似 === expect(1).toBe(1) toEqual:基本用来,匹配对象是否相等 expect({ one: 1 }).toEqual({ one:
Jest是 Facebook 的一套开源的 JavaScript 测试框架, 它自动集成了断言、JSDom、覆盖率报告等开发者所需要的所有测试工具,是一款几乎零配置的测试框架。并且它对同样是 Facebook 的开源前端框架 React 的测试十分友好。 2 安装Jest 2.1 初始化package.json 在shell中输入以下命令,初始化前端项目并生成package.json:
笑话忽略范围 要查看以下所有操作,请运行yarn install (或npm install ),然后进行yarn test (或npx jest --coverage )以收集覆盖率。 使用配置从Jest Coverage中排除文件 见 testPathIgnorePatterns 。 它忽略了src/testignore的内容,而src/testignore实际上只是在包含一个失败的测试。 参见 collectCoverageFrom 。 它不会从收集覆盖率。 从文件级别的Jest Coverage中排除文件 参见 。 它使用注释符号忽略文件。 从Jest报道中排除函数或语句 参见[./src/snippet.js]。 它展示了istanbul ignore next和istanbul ignore [type]语法(在这种情况下, istanbul ignore else )。
jasmine.objectContaining 的适用场合: jasmine.objectContaining 用于那些期望只关心实际中的某些键/值对的时候。 把这段代码改造一下: it(`should pass s