javascript - 使用 sinon 测试 React PropTypes

标签 javascript reactjs testing enzyme react-proptypes

作为示例,我使用了 Make React PropType warnings throw errors with enzyme.js + sinon.js + mocha.js .

我有一个带有一个必需 Prop 的 React 组件:

class Pagination extends Component {
    render() {
        return (
            ... render some stuff
        );
    }
}

Pagination.propTypes = {
    total: PropTypes.number.isRequired
};

这是对它的测试:

describe('(Component) Pagination', () => {
      before(() => {
         sinon.stub(console, 'error', (warning) => { throw new Error(warning) })
      })
      after(() => { console.error.restore() })

      it('render fails without props', () => {
          shallow(<Pagination />);
      });

      it('render fails without props2', () => {
        shallow(<Pagination />);
      });
    });

运行该测试后,第一个崩溃,但第二个没有。测试是相似的。 我认为问题在于 React 只抛出一次警告消息。 如何避免这种情况?

我想要进行 2 个测试:一个在没有设置 props 时会崩溃,而第二个在有 props 的情况下工作正常。

最佳答案

您可以找到解决方法 here :

Pagination.displayName = Math.random().toString();

你显然是对的,这是因为相同的组件,如果你在每次测试之前都这样做,那么它就会欺骗它。只是一个黑客,但它有效。显然没有更好的办法。

附言我在 beforeEach 中这样做是为了不自己在每个测试中都编写它。 附言random 不是最可靠的,因为你可以获得相同的名称并且它会失败,如果它不够好,可以使用 guid 或任何可以使用的东西,这只是一个例子。

关于javascript - 使用 sinon 测试 React PropTypes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40859389/

相关文章:

javascript - 将 Base64/BLOB 图像数据从 PHP 发送到 Javascript

javascript - 字符串到 JSON 转换

Android Espresso Intents 测试随机失败, `` init() 必须在使用此方法之前调用``

java - 如何使用 surefire 插件在自定义文件夹结构中运行测试

javascript - 这个游戏如何加载模块?

javascript - .focus() 与 Zepto 不工作

reactjs - 在material-ui的Popper组件中使用箭头的示例

testing - 您如何测试涉及通过电子邮件确认的用户流程?

javascript - 正确更新/合并 React Redux 存储中的数组值,不重复

reactjs - 在 create-react-app 上运行构建后出现空白页面