本文介绍了松散匹配 jest.toHaveBeenCalledWith 中的一个值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个分析跟踪器,它只会在 1 秒后调用一个对象,其中 intervalInMilliseconds
(持续时间)值不确定.
I have an analytics tracker that will only call after 1 second and with an object where the intervalInMilliseconds
(duration) value is not deterministic.
如何使用 jest.toHaveBeenCalledWith
来测试对象?
How can I use jest.toHaveBeenCalledWith
to test the object?
test('pageStats - publicationPage (will wait 1000ms)', done => {
const track = jest.fn()
const expected = new PayloadTiming({
category: 'PublicationPage',
action: 'PublicationPage',
name: 'n/a',
label: '7',
intervalInMilliseconds: 1000 // or around
})
mockInstance.viewState.layoutMode = PSPDFKit.LayoutMode.SINGLE
const sendPageStats = pageStats({
instance: mockInstance,
track,
remoteId: nappConfig.remoteId
})
mockInstance.addEventListener('viewState.currentPageIndex.change', sendPageStats)
setTimeout(() => {
mockInstance.fire('viewState.currentPageIndex.change', 2)
expect(track).toHaveBeenCalled()
expect(track).toHaveBeenCalledWith(expected)
done()
}, 1000)
expect(track).not.toHaveBeenCalled()
})
expect(track).toHaveBeenCalledWith(expected)
失败:
Expected mock function to have been called with:
{"action": "PublicationPage", "category": "PublicationPage", "intervalInMilliseconds": 1000, "label": "7", "name": "n/a"}
as argument 1, but it was called with
{"action": "PublicationPage", "category": "PublicationPage", "intervalInMilliseconds": 1001, "label": "7", "name": "n/a"}
我看过jest-extended但我没有看到任何对我的用例有用的东西.
I have looked at jest-extendedbut I do not see anything useful for my use-case.
推荐答案
这可以通过非对称匹配器来完成(在 Jest 18 中引入)
This can be done with asymmetric matchers (introduced in Jest 18)
expect(track).toHaveBeenCalledWith(
expect.objectContaining({
"action": "PublicationPage",
"category": "PublicationPage",
"label": "7",
"name": "n/a"
})
)
如果你使用 jest-extended
你可以做类似的事情
If you use jest-extended
you can do something like
expect(track).toHaveBeenCalledWith(
expect.objectContaining({
"action": "PublicationPage",
"category": "PublicationPage",
"label": "7",
"name": "n/a",
"intervalInMilliseconds": expect.toBeWithin(999, 1002)
})
)
这篇关于松散匹配 jest.toHaveBeenCalledWith 中的一个值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!