我正在比较两个相当复杂的对象,并尝试在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)的文章。你遇到过类似的情况吗?
5条答案
按热度按时间csga3l581#
使用
expect(JSON.stringify(controlStrore)).toEqual(JSON.stringify(liveStore))
oxosxuxt2#
在代码示例中,我们比较了
Store
的两个示例,它们封装了一些数据,因此即使数据(在我们的例子中是result
json)相同,也不一定意味着两个容器示例可以被视为相同。应该可以执行类似
expect(controlStore.getState()).toEqual(liveStore.getState())
的操作。sauutmhj3#
你可能试图通过你的Store类中的lambda函数来设置一个方法。所以jest试图比较不同的函数,这些函数是在你每次执行
new Store()
时单独生成的。结果它产生了一个错误,虽然它不能显示差异,但它只是不能打印函数。qxgroojn4#
我不推荐使用
JSON.stringify
,因为它可能隐藏了一个潜在的问题。根据我的经验,这个错误通常发生在数组被分配了一个不是数字的键时。例如:测试失败,错误为
Compared values have no visual difference
。要了解发生了什么,我建议记录对象,然后根据需要调整测试用例。mrphzbgm5#
如果比较对象,则应该是
deep equal
而不仅仅是equal
,例如: