Jest检验“比较值无视觉差异”,

5n0oy7gb  于 2023-01-22  发布在  Jest
关注(0)|答案(5)|浏览(156)

我正在比较两个相当复杂的对象,并尝试在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)  
    })
})

我在预期的和接收到的输出之间做了一个比较,它们看起来都是一样的。什么仍然会导致这个测试失败?我读了一些关于pretty-format(https://github.com/facebook/jest/issues/1622)的文章。你遇到过类似的情况吗?

csga3l58

csga3l581#

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

oxosxuxt

oxosxuxt2#

在代码示例中,我们比较了Store的两个示例,它们封装了一些数据,因此即使数据(在我们的例子中是result json)相同,也不一定意味着两个容器示例可以被视为相同。
应该可以执行类似expect(controlStore.getState()).toEqual(liveStore.getState())的操作。

sauutmhj

sauutmhj3#

你可能试图通过你的Store类中的lambda函数来设置一个方法。所以jest试图比较不同的函数,这些函数是在你每次执行new Store()时单独生成的。结果它产生了一个错误,虽然它不能显示差异,但它只是不能打印函数。

qxgroojn

qxgroojn4#

我不推荐使用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' ]
mrphzbgm

mrphzbgm5#

如果比较对象,则应该是deep equal而不仅仅是equal,例如:

import chai from 'chai'
chai.should()

controlStore.should.be.deep.equal(liveStore)

相关问题