Jasmine toHaveBeenCalledWith 部分匹配

103

使用Jasmine,我可以窥视方法并找出参数。我希望能够调用toHaveBeenCalledWith(something, anything)

假设我想窥视一个方法.on(event, callback)。我只关心是否监听了event,而不是实际回调的身份。是否可以在不编写自定义匹配器的情况下实现这一点?我没有看到任何一个。


Jest的类似问题是https://dev59.com/hFQK5IYBdhLWcg3wKc1M#67193668 - Michael Freidgeim
3个回答

138

尝试

toHaveBeenCalledWith(jasmine.any(Object), jasmine.any(Function))

17
如果类型不重要,也可以更加不在意,使用jasmine.anything() - John Neuhaus

65

这是一个更好的答案,同样适用于 jest - Ron
更新链接:https://jasmine.github.io/api/edge/jasmine.html#.objectContaining - Nate

27
如果您希望测试特定的事物,您可以尝试类似这样的方法:
expect(mockSomething.someMethod.mostRecentCall.args[0].pool.maxSockets).toEqual(50);

Jasmine 2的语法现在是:

mockSomething.someMethod.calls.mostRecent().args[0]

7
可用于传入额外的可选参数。请注意,Jasmine 2 的语法现在为 mockSomething.someMethod.calls.mostRecent().args[0] - John McCarthy
让spy = spyOn(nameService,'getName').and.returnValue(Observable.of('Ali')); nameService.getName('Henry'); 期望(spy.calls.all()[0].args[0]).toEqual('Henry'); - oomer
在我的情况下,我希望对一个长字符串进行部分匹配,所以扩展oomer的例子;nameService.getNameFromQuestion('The Tutor King who is also a song is Henry'); const longString = spy.calls.mostRecent().arg[0] as string; expect(longString.search('Henry')).toBeGreaterThanEqualTo(0); - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接