【问题标题】:Jest Test "Compared values have no visual difference."开玩笑测试“比较值没有视觉差异。”
【发布时间】:2017-08-13 05:28:39
【问题描述】:

我正在对两个相当复杂的对象进行比较,并尝试在 expect 中使用 .toEqual 方法。

这是我的测试:

it('check if stepGroups data in controlData matches data in liveData', () =>    {
    var controlStore = data.controlStore
    var liveStore
    return getData().then(result => {
        liveStore = new Store()
        liveStore.loadData(JSON.parse(result))
        expect(controlStore).toEqual(liveStore)  
    })
})

我在预期输出和接收到的输出之间做了一个差异,它们看起来都是一样的。什么仍然会导致该测试失败?我正在阅读漂亮格式 (https://github.com/facebook/jest/issues/1622)。你有遇到过类似的情况吗?

【问题讨论】:

    标签: javascript unit-testing reactjs jestjs


    【解决方案1】:

    在您的代码示例中,您将比较 Store 的两个实例,它们封装了一些数据。因此,即使数据(在您的情况下为resultjson)相同,也不一定意味着两个容器实例可以被视为相等。

    应该可以做类似expect(controlStore.getState()).toEqual(liveStore.getState())的事情。

    【讨论】:

      【解决方案2】:

      使用expect(JSON.stringify(controlStrore)).toEqual(JSON.stringify(liveStore))

      【讨论】:

      • 我试过了,但测试仍然没有成功
      【解决方案3】:

      您可能尝试通过 Store 类中的 lambda 函数设置方法。因此,jest 试图与不同的函数进行比较,这些函数每次执行new Store() 时都会单独生成。结果就报错了,虽然不能显示差异,只是不能打印功能。

      【讨论】:

      • 我遇到了类似的问题...我怀疑解决方案是比较对象中的函数。但是,我很满意所需的属性存在,因此 - 所需的代码已返回
      【解决方案4】:

      我不建议使用JSON.stringify,因为它可能会隐藏一个潜在的问题。根据我的经验,这个错误主要发生在为数组分配的键不是数字时。示例:

        const arr = [1]
        arr.a = 'b'
        expect(arr).toEqual([1])
      

      测试失败,错误为Compared values have no visual difference。为了了解发生了什么,我建议记录该对象,然后根据需要调整测试用例。

      console.log(arr)
      // logs [ 1, a: 'b' ]
      

      【讨论】:

      • 非常感谢您。在我的例子中,该数组有一个 Jest 没有显示的“-1”键,但是使用 console.log() 指出了问题。
      猜你喜欢
      • 1970-01-01
      • 2017-11-28
      • 1970-01-01
      • 2018-02-15
      • 2021-03-19
      • 1970-01-01
      • 2018-02-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多