【问题标题】:Is it obligatory to mock useState hooks with Jest and Enzyme?用 Jest 和 Enzyme 模拟 useState 钩子是必须的吗?
【发布时间】:2022-01-06 03:29:05
【问题描述】:

用 Jest 和 Enzyme 模拟 useState 钩子是否有义务?因为一个简单的组件做起来很复杂。

Enzyme 的simulate 函数在这种情况下有效吗?

【问题讨论】:

    标签: reactjs jestjs enzyme


    【解决方案1】:

    您的唯一义务是对您正在构建的任何产品、您的业务需求、您的客户和您的团队。当然,您没有 Enzyme 规定的任何义务。您可以很好地使用 Enzyme,而无需嘲笑 useState

    我会更进一步,建议不要在一般情况下嘲笑 useState,假设这对您的团队来说没问题并且对您的产品有意义。原因是useState 是用户不关心的实现细节,并且不是组件的业务规范或功能的组成部分。在useState 和其他类型的状态管理之间进行更改不应破坏您的行为测试。

    在撰写本文时,Enzyme(连同其具有侵入性的 100% 线路覆盖理念)普遍被淘汰,取而代之的是 React Testing Library 及其“不测试实现细节”理念。与 Enzyme 不同,RTL 不利于深入挖掘组件的状态和生命周期,而是鼓励测试依赖 UI 和 props 来操作组件。

    React documentation 目前建议使用 RTL 和黑盒方法进行测试:

    我们建议使用 React 测试库,该库旨在支持和鼓励编写测试,像最终用户一样使用您的组件。

    Elsewhere,上面写着:

    React 测试库是一组帮助程序,可让您测试 React 组件,而无需依赖其实现细节。这种方法使重构变得轻而易举,并推动您采用可访问性的最佳实践。

    Kent Dodds 在testing implementation details 上有一篇很棒的博文,其中提供了酶哲学为何危险的具体例子。这一切都归结为避免“测试用户”——一个虚构的应用程序客户端,无法替代实际用户(将使用 UI)和程序员(将使用 API 与模块交互)。未经检查,测试用户往往会对您的测试提出要求,例如 100% 的代码覆盖率和模拟状态和生命周期,这些要求不一定与组件的功能或行为相关。


    关于simulate——我不确定你的用例是什么,但它应该可以在没有状态模拟的情况下正常工作,因为它用于触发元素上的事件,触发组件的事件处理程序。

    【讨论】:

    • 谢谢,我会看不同测试库的不同理念和方法,我还是不太习惯
    猜你喜欢
    • 2019-01-29
    • 2021-05-11
    • 2020-02-02
    • 2019-08-28
    • 2019-10-27
    • 1970-01-01
    • 1970-01-01
    • 2019-08-02
    • 2018-03-28
    相关资源
    最近更新 更多