Jest Test"比较值没有视觉差异。"

时间:2017-03-21 13:45:06

标签: javascript unit-testing reactjs jestjs

我在两个非常复杂的对象之间进行比较,并试图在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)。你遇到过类似的情况吗?

4 个答案:

答案 0 :(得分:16)

使用getDuplicateEntity()

答案 1 :(得分:11)

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

应该可以做expect(controlStore.getState()).toEqual(liveStore.getState())

之类的事情

答案 2 :(得分:1)

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

答案 3 :(得分:0)

我不建议使用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' ]