用玩笑模拟material-ui选择组件

Posted

技术标签:

【中文标题】用玩笑模拟material-ui选择组件【英文标题】:Mocking of material-ui select component with jest 【发布时间】:2019-09-20 16:23:17 【问题描述】:

我创建了一个 React 组件,我正在尝试使用 React Testing Library 进行测试。在我的组件中,我有以下选择组件及其更改处理程序

Component.jsx

<SingleSelect
  name="filter"
  label="Status"
  value=this.state.weatherStatus
  options=this.state.weatherStatusOptions
  onChange=this.handleFilterChange
  testId="status"
/>

onChange handleFilterChange函数

handleFilterChange = (event) => 
  this.setState( weatherStatus: event.value );

传递值this.state.weatherStatus 的示例是 id: 1, text: "cool weather" 为此,我尝试编写如下样机。

jest.mock('@material-ui/core/Select', () => props => (
  <div>
    <input
      onChange=(e) => props.onChange( target:  value: e.target.value )
      value=props.value
      data-testid=props['data-testid']
    />
    props.children
  </div>
));

fireEvent.change(getByTestId('select'),  target:  value:  id: 1, text: "cool"   );
expect(getByTestId('select').value).toEqual( id: 1, text: "cool" );

但它根本不起作用。有什么建议吗?

【问题讨论】:

我很确定 react-test-library 不适用于 Material-UI。我一直试图让 fireEvents 工作好几天,但它没有发生。 您可以添加更多数据吗?你在测试中呈现什么? SingleSelect 长什么样子?你得到什么错误? 【参考方案1】:

这绝对是可能的。我只是设法破解它。

jest.mock('@material-ui/core/Select', () => (...rest)=> 
   return(  
     <div>
       <input
         data-testid='mock-component'
       />
   </div>
   )
 );

你只需要把它放在描述上面。

【讨论】:

以上是关于用玩笑模拟material-ui选择组件的主要内容,如果未能解决你的问题,请参考以下文章

不能用玩笑模拟模块,并测试函数调用

开玩笑的模拟尺寸不变

如何开玩笑地模拟 i18next 模块

如何用玩笑模拟组件中使用的“嵌套”角度服务

开玩笑的预期模拟未调用(redux 组件)

在玩笑中模拟功能组件会引发“无效的变量访问”错误