【问题标题】:Test Material UI Tabs and Enzyme测试材料 UI 选项卡和酶
【发布时间】:2019-02-05 18:41:30
【问题描述】:

我在使用 Enzyme 和 Jest 测试 Material UI 选项卡时遇到问题。 问题是模拟点击Tab组件

我已经尝试过材料浅层方法(createShallow)和酶浅层但结果是一样的

我在 Tab 组件上的 console.log 正在返回我的目标元素:

   <WithStyles(Tab) label="Tab one" />

这是我的代码:

const setup = (newProps) => {
  const props = {
    selected: 0,
    changeTab: jest.fn(),
    ...newProps
  }

  const wrapper = shallowUntilTarget(<DashboardTabs { ...props } />, Base)

  return {
    props,
    wrapper
  }
}

shallowUntilTarget 只是一个代码片段,用于在 HOC 中使用 .dive 递归查找组件 https://github.com/airbnb/enzyme/issues/539

it('Should call the onChange function', () => {
    const { wrapper, props } = setup()
    const tab = wrapper.find({ label: 'Tab One' })
    tab.simulate('click')
    wrapper.update()
    console.log(wrapper.debug()) // I should see a differente content after click in this tab 

    expect(props.changeTab.mock.calls.length).toBe(1) // the mock function call return 0 on the length
  })

什么也没发生 :(

【问题讨论】:

  • 运行测试时遇到什么错误?
  • 你在哪里对你的 comp 进行浅渲染?
  • 不返回任何错误,我只是在模拟点击后没有得到预期的行为。而浅层在 jest 的一个 it 函数中
  • 请出示你的笔试
  • 我编辑了我的帖子并把整个“it”功能放了

标签: reactjs material-ui enzyme


【解决方案1】:

您需要使用WrappedComponent 来深入了解组件上的 HOC:

import { shallow } from 'enzyme';


wrapper = shallow(<DashboardTabs .WrappedComponent {...props} />).dive();

你可以找到这样的元素:

wrapper.find(‘withStyles(Tab)’)

可能需要根据您的用例进行一些调整。但它会帮助你

【讨论】:

  • 我无法让它工作......我认为 HOC 运行良好,因为我可以使用 .debug() 方法在控制台中看到元素:/
  • @GabrielSantos 查看编辑后的答案以使用 withStyles 查找元素
  • 这样的查找也可以正常工作,但也不会触发“模拟”点击
  • 但是你应该为点击处理程序发送一个模拟函数
  • 是的,我正在使用 Jest 助手 jest.fn() 发送模拟函数
猜你喜欢
  • 2021-02-26
  • 1970-01-01
  • 1970-01-01
  • 2020-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多