【问题标题】:How to test the handlers in withHandlers, branch and withState of recompose with enzyme?如何测试 withHandlers、branch 和 withState 中的处理程序与酶重组?
【发布时间】:2018-02-14 17:10:47
【问题描述】:

我是酶测试的新手,我制作了一个组件:

import React from 'react';
import {
  compose,
  withState,
  withHandlers,
  branch,
  pure,
  renderComponent,
} from 'recompose';

import Fields from './components/Fields';
import Flow from './components/Flow';

export const MODE = {
  preview: 'preview',
  edit: 'edit',
};

const inEditMode = ({ mode }) => mode === MODE.edit;

const Component = branch(
  inEditMode,
  renderComponent(Fields),
  renderComponent(Flow),
)(Flow);

const Tab = pure(props => <Component {...props} />);

export default compose(
  withState('mode', 'changeMode', props => {
    const path = props.path;

    return props.path ? MODE.preview : MODE.edit;
  }),
  withHandlers({
    changeMode: ({ changeMode }) => () => changeMode(currentState => currentState === MODE.preview ? MODE.edit : MODE.preview),
    onApprovalChange: ({ onAction, entity }) => data => {
      onAction({ ...data, status: 'UPDATED' }, data.id);
    },
  }),
)(Tab);

在上述组件中,我想测试以下内容:

  1. Component的渲染

  2. inEditMode组件的功能

  3. withStatewithHandlers 中存在的处理程序

  4. branch recompose 实用程序(我认为我不需要检查这个,因为他们可能已经检查过了,但假设我想测试这样的功能)

我可以在 stackoverflow 上找到一些关于测试的文档,但没有一种资源可以提供总体思路。

【问题讨论】:

标签: reactjs jestjs enzyme recompose


【解决方案1】:

在测试您的组件时,您应该只测试您的组件,而不是容器(包装它的函数),因为它们是高阶组件

如果你想测试来自recompose 的函数,请查看他们自己的测试:https://github.com/acdlite/recompose/blob/master/src/packages/recompose/tests/withState-test.js 并在此基础上编写自己的代码。

至于您的组件,请确保您导出各个部分并对其进行测试。在您的场景中将是功能组件inEditMode

export const inEditMode = ({ mode }) => mode === MODE.edit;

这就是您需要在此组件上进行测试的全部内容。

【讨论】:

  • 为什么不测试容器?我认为最好测试整个东西,这就是它将在其他任何地方使用的方式。 recompose 传递的 props 只是实现细节。
  • @MiguelCarvajal 与每次使用时都不会定义函数的方式相同,使用时也不会对其进行测试。如果我定义了一个在 10 个组件中使用的实用程序“parseAtoB”,那么在每个组件上检查“如果输入是 A 返回 B”是没有意义的。当然,我可以通过为我正在使用的第三方库构建测试来保护我的应用程序,确保该库继续执行我需要它执行的操作。但后来我只需要测试我调用了正确的函数“组件 C 调用 parseAtoB”,并期望 util 执行该操作。
猜你喜欢
  • 2018-02-22
  • 2017-03-28
  • 1970-01-01
  • 2017-07-02
  • 1970-01-01
  • 2020-06-14
  • 2018-08-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多