如何嘲笑一个函数或防止默认?

时间:2019-05-08 08:39:07

标签: javascript reactjs unit-testing jestjs react-testing-library

我正在尝试使用react-testing-lib进行一些集成测试

我想在我的React类handleSubmit

中模拟一个函数
handleSubmit(){
 // does some stuff
 // calls an action creator

}

我基本上想对这个方法进行存根,以便它返回null / undefined或其他任何值。但我不希望它真正地叫动作创建者

我想断言某些UI的原因是,调用动作创建者给我的错误是:

  

动作必须是普通对象。使用自定义中间件执行异步操作。

我也尝试过jest.mock(thismethod)和jest.spyOn()`,但似乎都不起作用。我只想让它做类似的事情

myFunc() {

}

好像它是一个空函数,什么也不做。我该如何存根?

2 个答案:

答案 0 :(得分:0)

看来handleSubmit是一种原型方法...如果是原型方法,则可以这样模拟:

import * as React from 'react';
import { render, fireEvent } from 'react-testing-library';

class MyComponent extends React.Component {
  handleSubmit() {  // <= prototype method
    throw new Error('should not get here');
  }
  render() {
    return (<button onClick={this.handleSubmit}>the button</button>);
  }
}

test('MyComponent', () => {
  const mock = jest.spyOn(MyComponent.prototype, 'handleSubmit');
  mock.mockImplementation(() => {});  // <= replace the implementation

  const { getByText } = render(<MyComponent/>);
  fireEvent.click(getByText('the button'));

  expect(mock).toHaveBeenCalled();  // Success!
});

只需确保在渲染组件之前在原型上实现了模拟。

答案 1 :(得分:0)

尝试下面的功能和动作模拟:

SpecificFunction<A,B>