使用 useState() 钩子测试功能组件时设置状态

新手上路,请多包涵

当我用酶测试类组件时,我可以做 wrapper.setState({}) 来设置状态。当我使用 useState() 钩子测试功能组件时,我现在该怎么做?

例如在我的组件中,我有:

 const [mode, setMode] = useState("my value");

我想在我的测试中改变 mode

原文由 Anna 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 282
1 个回答

当使用来自钩子的状态时,您的测试必须忽略状态等实现细节才能正确测试它。您仍然可以确保组件将正确的状态传递给其子级。

您可以在 Kent C. Dodds 撰写的这篇 文中找到一个很好的示例。

这是一个带有代码示例的摘录。

依赖于状态实现细节的测试 -

 test('setOpenIndex sets the open index state properly', () => {
  const wrapper = mount(<Accordion items={[]} />)
  expect(wrapper.state('openIndex')).toBe(0)
  wrapper.instance().setOpenIndex(1)
  expect(wrapper.state('openIndex')).toBe(1)
})

不依赖于状态实现细节的测试——

 test('counter increments the count', () => {
  const {container} = render(<Counter />)
  const button = container.firstChild
  expect(button.textContent).toBe('0')
  fireEvent.click(button)
  expect(button.textContent).toBe('1')
})

原文由 Moti Azu 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进