如何使用Jest测试对象的一部分?

man*_*ana 16 javascript tdd jestjs

我想测试时间是否正确解析,我只对检查一些属性而不是整个对象感兴趣.在这种情况下小时和分钟.

我尝试使用expect(object).toContain(value)但是你可以在下面的代码片段中看到它失败了,尽管该对象包含我感兴趣的属性并且它们具有正确的值.

? Calendar > CalendarViewConfig › it should parse time

expect(object).toContain(value)

Expected object:
  {"display": "12:54", "full": 774, "hour": 12, "hours": 12, "minutes": 54, "string": "12:54"}
To contain value:
  {"hours": 12, "minutes": 54}

  67 |   it('it should parse time', () => {
  68 |     ...
> 69 |     expect(parseTime('12:54')).toContain({ hours: 12, minutes: 54})
  70 |   })

  at Object.<anonymous> (src/Components/Views/Calendar/CalendarViewConfig.test.js:69:32)
Run Code Online (Sandbox Code Playgroud)

tho*_*n87 29

要检查预期对象是否是接收对象的子集,您需要使用toMatchObject(object)方法:

expect(parseTime('12:54')).toMatchObject({ hours: 12, minutes: 54})
Run Code Online (Sandbox Code Playgroud)

或者expect.objectContaining(object)匹配者:

expect(parseTime('12:54')).toEqual(expect.objectContaining({ hours: 12, minutes: 54}))
Run Code Online (Sandbox Code Playgroud)

它们的工作方式略有不同,请查看".toMatchObject"和"objectContaining"之间的区别.

toContain() 用于检查项目是否在数组中.


rot*_*ial 9

如果要测试对象数组内对象的一部分,请使用objectContaininginside arrayContaining。这是一个例子:

test( 'an object in an array of objects', async () => {
  const bookData = [
    {
      id: 1,
      book_id: 98764,
      book_title: 'My New International Book',
      country_iso_code: 'IN',
      release_date: '2022-05-24'
    },
    {
      id: 2,
      book_id: 98764,
      book_title: 'My New International Book',
      country_iso_code: 'GB',
      release_date: '2022-05-31'
    },
    {
      id: 3,
      book_id: 98764,
      book_title: 'My New International Book',
      country_iso_code: 'US',
      release_date: '2022-06-01'
    }
  ];

  expect( bookData ).toEqual( 
    expect.arrayContaining([ 
      expect.objectContaining(
        {
          country_iso_code: 'US',
          release_date: '2022-06-01'
        } 
      )
    ])
  );
} );
Run Code Online (Sandbox Code Playgroud)

我从这篇 Medium 文章中得到了这个。