Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 玩笑测试“;比较值没有视觉差异。”;_Javascript_Unit Testing_Reactjs_Jestjs - Fatal编程技术网

Javascript 玩笑测试“;比较值没有视觉差异。”;

Javascript 玩笑测试“;比较值没有视觉差异。”;,javascript,unit-testing,reactjs,jestjs,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

我正在比较两个非常复杂的对象,并尝试在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()的文章。您遇到过类似的情况吗?

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


应该可以使用
expect(controlStore.getState()).toEqual(liveStore.getState())
使用
expect(JSON.stringify(controlStrore)).toEqual(JSON.stringify(liveStore))
您可能试图通过Store类中的lambda函数设置方法。因此jest试图比较不同的函数,这些函数是在每次执行
newstore()
时分别生成的。因此,它会出现一个错误,虽然它不能显示差异,但它不能打印函数。

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

  const arr = [1]
  arr.a = 'b'
  expect(arr).toEqual([1])
测试失败,出现错误
比较值无视觉差异
。为了理解发生了什么,我建议记录对象,然后根据需要调整测试用例

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

我也有类似的问题。。。我怀疑解决方案是比较对象中的函数。但是,我很满意,所需的属性已经存在,因此,所需的代码已经返回。我尝试了这个测试,但仍然没有成功。谢谢。在我的例子中,数组有一个没有被Jest显示的'-1'键,但是console.log()的使用指出了问题所在。