【问题标题】:Jest expect().toEqual() not throwing errorJest expect().toEqual() 不抛出错误
【发布时间】:2017-05-04 18:20:17
【问题描述】:

如果我使用 toEqual(),我预计以下示例测试会失败,但它通过了:

it('sample test to check toEqual and toBe', () => {
   const expectedAction = {test: '123', value: undefined};
   const actualAction = {test: '123'};
   expect(expectedAction).toEqual(actualAction);
}) 

如果我使用 .toBe(),同样的测试会失败。但是,如果我像这样修复测试用例:

it('sample test to check toEqual and toBe', () => {
   const expectedAction = {test: '123', value: '123'};
   const actualAction = {test: '123', '123'};
   expect(expectedAction).toBe(actualAction);
});

它再次失败说“比较值没有视觉差异”。

行为是否正确?如何修改我的测试用例以使其正确失败。

【问题讨论】:

    标签: unit-testing reactjs jestjs


    【解决方案1】:

    如果您确实需要将其视为不同,一种选择是使用 Jest 快照测试,例如:

    expect(expectedAction).toMatchSnapshot();
    

    第一次,它会创建一个快照文件并将javascript对象打印给它,当你再次运行测试时,它会将它与快照进行比较。 大多数情况下,快照用于比较组件渲染树,但您可以将其用于任何 javascript 对象。

    【讨论】:

      【解决方案2】:

      第一个通过原因 toEqual 将对象的每个元素相互比较,所以在你的情况下

      expectedAction.test === actualAction.test
      

      因为两者都是'123'

      但对于

      来说也是如此
      expectedAction.value === actualAction.value
      

      因为两者都是undefined

      第二个测试失败导致toBe 使用=== 比较两个对象,这将导致失败,因为它们不是相同的实例。对象通过toBe 的唯一方法是使用自身进行比较:

      expect(expectedAction).toBe(expectedAction)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-02-24
        • 2021-03-07
        • 2019-11-19
        • 2017-11-19
        • 2020-12-07
        • 2020-09-01
        • 1970-01-01
        相关资源
        最近更新 更多