笑话中有toeCalled
或toBeCalledWith
之类的函数来检查是否调用了特定函数。有什么方法可以检查未调用函数吗?
只需使用not
。
expect(mockFn).not.toHaveBeenCalled()
[not
]对我不起作用,抛出Invalid Chai property: toHaveBeenCalled
但是使用toHaveBeenCalledTimes
为零将达到目的:
expect(mock).toHaveBeenCalledTimes(0)
请遵循jest提供的文档:https://jestjs.io/docs/en/mock-functions#mock-property
所有模拟函数均具有此特殊的.mock属性,该属性保存有关如何调用函数以及返回的函数的数据。 .mock属性还跟踪每个调用的此值,因此也可以检查此值:[...]
这些模拟成员在测试中非常有用,可以断言这些函数如何被调用,实例化或它们返回什么:
// The function was called exactly once
expect(someMockFunction.mock.calls.length).toBe(1);
或...
// The function was called exactly once
expect(someMockFunction.mock.calls.length).toBe(0);
最近的Jest版本(22.x及更高版本)收集了相当不错的模拟函数调用统计信息,只需签出their docs。
calls
属性显示您的调用次数,传递给模拟的参数,返回的结果等。您可以作为mock
的属性直接访问它(例如,以@Christian Bonzelet在他的答案中建议的方式):
// The function was called exactly once
expect(someMockFunction.mock.calls.length).toBe(1);
// The first arg of the first call to the function was 'first arg'
expect(someMockFunction.mock.calls[0][0]).toBe('first arg');
// The second arg of the first call to the function was 'second arg'
expect(someMockFunction.mock.calls[0][1]).toBe('second arg');
我个人更喜欢这种方式,因为它可以为您提供更大的灵活性,并使代码更清晰,以防万一您测试产生不同数量调用的不同输入。
但是,您也可以从最近(expect
)开始使用Jest的spy matchers aliases PR的速记别名。我想.toHaveBeenCalledTimes
在这里很合适:
.toHaveBeenCalledTimes
[在极少数情况下,您甚至可能要考虑编写自己的灯具来进行计数。例如,如果您非常注重条件调整或使用状态,它可能会很有用。
希望这会有所帮助!