Jestjs 笑话如何断言函数未被调用

Jestjs 笑话如何断言函数未被调用,jestjs,Jestjs,实际上,有一些函数像toeCalled或toBeCalledWith来检查是否调用了特定的函数。 有没有办法检查函数是否未被调用?只需使用not expect(mockFn).not.toHaveBeenCalled() not对我不起作用,抛出了一个无效的Chai属性:tohaveincalled 但是,使用将调用时间设置为零可以达到以下目的: expect(mock).toHaveBeenCalledTimes(0) 请遵循jest的文档: 所有mock函数都有这个特殊的.mock属性,

实际上,有一些函数像
toeCalled
toBeCalledWith
来检查是否调用了特定的函数。
有没有办法检查函数是否未被调用?

只需使用
not

expect(mockFn).not.toHaveBeenCalled()

not
对我不起作用,抛出了一个
无效的Chai属性:tohaveincalled

但是,使用
将调用时间
设置为零可以达到以下目的:


expect(mock).toHaveBeenCalledTimes(0)

请遵循jest的文档:

所有mock函数都有这个特殊的.mock属性,它保存了有关函数如何被调用以及函数返回内容的数据。.mock属性还跟踪每个调用的此值,因此也可以检查此值:[……]

这些模拟成员在测试中非常有用,可以断言这些函数如何被调用、实例化或返回什么:

或者

Jest的最新版本(22.x及更高版本)收集了相当不错的模拟函数调用统计数据,请查看

calls
属性显示调用的数量、传递给mock的参数、从mock返回的结果等等。您可以直接访问它,作为
mock
的属性(例如@Christian Bonzelet在其回答中建议的方式):

我个人更喜欢这种方式,因为它给了您更多的灵活性,并保持代码更干净,以防您测试产生不同数量调用的不同输入

但是,您也可以为Jest的
expect
since recently()使用速记别名。我想这很合适:

test('drinkEach drinks each drink', () => {
  const drink = jest.fn();
  drinkEach(drink, ['lemon', 'octopus']);
  expect(drink).toHaveBeenCalledTimes(2); // or check for 0 if needed
});
在罕见的情况下,你甚至可能会考虑编写自己的计时器。例如,如果你对条件反射或状态处理很重,它可能会很有用


希望这有帮助

请查看文档,
toBeCalled
的两个示例之一是如何检查未调用的函数:问题是关于JESTW您的意思是什么?我的答案是用笑话来解决问题
// The function was not called
expect(someMockFunction.mock.calls.length).toBe(0);
// 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');
test('drinkEach drinks each drink', () => {
  const drink = jest.fn();
  drinkEach(drink, ['lemon', 'octopus']);
  expect(drink).toHaveBeenCalledTimes(2); // or check for 0 if needed
});