【问题标题】:React - Advice for testing a NavBar ComponentReact - 测试 NavBar 组件的建议
【发布时间】:2020-01-02 10:24:39
【问题描述】:

我是一名试图了解 React 组件测试的新用户。我在 Typescript 环境中使用 Enzyme 和 Jest。

我正在尝试测试的组件之一是 NavBar 组件,它使用 material-ui 按钮实现。

const NavBarLinks = (): JSX.Element => (
  <>
    <Button
      color="inherit"
      component={NavLink}
      activeClassName={navbar.highlighted}
      to="/about"
    >
      About
    </Button>
    <Button
      activeClassName={navbar.highlighted}
      color="inherit"
      component={NavLink}
      to="/courses"
    >
      Courses
    </Button>
    <Button
      activeClassName={navbar.highlighted}
      color="inherit"
      component={NavLink}
      exact={true}
      to="/"
    >
      Home
    </Button>
  </>
);

我编写了一个快照测试来测试组件是否呈现具有预期链接和属性等的按钮。

是否还需要测试导航栏组件在单击按钮时是否更改了路线?我已经开始为此功能编写测试here

是不是认为react-router提供的NavLink组件已经对这个功能进行了测试。以后,导航栏上的每条路由变化就不用写测试了吗?

【问题讨论】:

    标签: reactjs testing enzyme


    【解决方案1】:

    这是一个很好的问题,归结为测试哲学。测试有多种类型:单元测试、端到端测试等。

    如果您正在测试一个组件,那么您就是在对其进行单元测试。基本上,您正在测试它是否在某种程度上孤立地表现出应有的行为。为此,快照测试很好,您可以通过测试它具有的特定值来加倍努力,例如每个 Button 具有的url

    [React 测试库[(https://github.com/testing-library/react-testing-library) 让这变得非常简单,我实际上建议使用它与 Enzyme。

    如果您想测试导航栏是否呈现了它应该呈现的内容,它会变成end to end test

    【讨论】:

    • 非常感谢您的回复 :) 感谢您链接到 React 测试库。因此,单元测试将检查组件属性等,最好使用快照来完成。路由、连接到 redux 存储等功能以及完整呈现将是端到端测试示例......
    • 快照不足以对复杂组件进行单元测试。快照 + 测试特定值(例如 Button 的 url 和文本)是进行可靠测试的好方法。您仍然可以对 redux 存储、函数等进行单元测试,但是如果您想跨页面进行测试,最好使用端到端的方式进行测试。很难在评论中简化测试,搜索一些文章。 Kend C Doods 在这方面非常出色。
    • @anon_dcs3spp 那么e2e测试应该存在于Navbar组件中还是之外呢?
    • @ReturnOfTheMac 对于 e2e 测试,我使用了 cypress。这允许我加载一个浏览器实例和一个页面,然后测试该页面上的每个导航栏链接是否移动到预期的路线......
    猜你喜欢
    • 1970-01-01
    • 2019-03-23
    • 1970-01-01
    • 1970-01-01
    • 2020-02-05
    • 2015-10-11
    • 2017-10-03
    • 1970-01-01
    • 2015-07-19
    相关资源
    最近更新 更多