Javascript 玩笑测试“;比较值没有视觉差异。”;
我正在比较两个非常复杂的对象,并尝试在expect中使用.toEqual方法 这是我的测试: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
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()的使用指出了问题所在。