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