使用sinon测试React PropTypes

时间:2016-11-29 06:45:19

标签: javascript reactjs testing enzyme react-proptypes

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

我有一个React组件,其中包含一个必需的prop:

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次测试:一次在没有设置道具时会崩溃,第二次在道具上工作正常。

1 个答案:

答案 0 :(得分:1)

您可以找到解决方法here

inline

你显然是正确的,因为它是相同的组件,如果你在每次测试之前这样做,那么它会欺骗它。只是一个黑客,但它的工作原理。显然没有更好的方法。

P.S。我是在Pagination.displayName = Math.random().toString(); 中完成的,不在自己的每个测试中写它。 P.P.S.随机不是最可靠的,因为你可以得到相同的名称,它会失败,如果它不够好,可以使用guid或其他任何东西,它只是一个例子。