【问题标题】:How to perform integration tests with cypress-react-selector in production?如何在生产中使用 cypress-react-selector 执行集成测试?
【发布时间】:2021-09-28 23:15:30
【问题描述】:

我在 SO 和文档网站上进行了很多搜索,但没有解决我的问题。
我们正在使用cypress-react-selector 在工作中测试我们的 React 应用程序,它在本地开发中运行良好。

问题是,一旦我们开始生产并且 React 组件被缩小,所有测试都不会通过,因为 cy.getReact() 方法无法找到组件。

例如,在本地开发中我曾经有过这段代码:

cy
  .getReact('Button', { props: { icon: 'myAwesomeIcon' } })
  .should(({ node }) => node ? node.click() : null);

但在生产中,Button 组件被缩小了(使用 React 开发工具,我发现它被简单地称为 d)。

如何创建能够在本地和生产环境中运行的测试?

【问题讨论】:

    标签: reactjs integration-testing cypress production-environment


    【解决方案1】:

    根据这个问题(20天前)"Component not found" because of not considered displayName,您可以通过添加displayName来修复它

    以前,使用的 resq 依赖项没有像在 React 开发工具中那样考虑 displayName。 结果是,如果它们的名称被缩小,即使它们有一个 displayName,也无法通过它们的名称找到组件。

    我已经为此提供了一个修复程序,该修复程序现已合并并在 resq 版本 1.10.1 中发布。

    能否请您更新 cypress-react-selector 以使用新的 resq 版本,以便这里也考虑 displayName?

    感谢@jens-duttke,它在当前版本中可用。

    对于功能组件,

    const Button = (props) => { ... }
    
    Button.displayName = 'Button'
    

    对于一个类组件

    class Button extends React.Component {
      static displayName = 'Button';
      ...
    }
    

    【讨论】:

    • 感谢您的回复。然而,这意味着为测试阶段添加一些自定义逻辑,这首先被认为是不好的做法(但这次我不能考虑这个问题);真正的问题是我的应用程序依赖于不是我们直接编写的库公开的组件,所以我不能在任何地方添加displayName。恐怕这对我的情况来说不是一个可用的解决方案:(
    • 确实,但它会让人受益。我想这块石头让你陷入了困境——如果你想测试 E2E(缩小),你将不得不在没有插件的情况下弄清楚 Cypress 代码。
    • displayName 被认为是调试的最佳实践。我的观点是成本最低且实用。
    • 非我们直接编写的库 - 不是您测试的重点?
    • 我会试一试,然后我会回来找你的。让我们试试如果我能管理它。谢谢你现在
    猜你喜欢
    • 2021-03-11
    • 1970-01-01
    • 2017-01-24
    • 2011-09-24
    • 1970-01-01
    • 2017-12-21
    • 1970-01-01
    • 2022-06-29
    • 2023-02-11
    相关资源
    最近更新 更多