【问题标题】:jest test:coverage with react propTypes / defaultProps笑话测试:使用 react propTypes / defaultProps 覆盖
【发布时间】:2021-03-08 15:28:28
【问题描述】:

我有一个愚蠢的组件,我传递的道具很少。我也在使用 PropTypes。

当我运行 jest test:coverage 时,它​​会显示 % Funcs 100。 但是,当我添加 defaultProps 时,test:coverage for % Funcs 下降到 50。

有什么方法可以测试 defaultProps 或者从 test:coverage chyeck/report 中排除这些?

【问题讨论】:

    标签: reactjs jestjs react-proptypes


    【解决方案1】:

    最简单的方法,应该是在 defaultProps 语句上方使用这一行 istanbul ignore next

    /* istanbul ignore next */
    DetailPage.defaultProps = {
      metaData: null
    };
    

    【讨论】:

    • 不错的建议。但是,我真的不想在每个组件中添加这个标志来忽略默认道具...可以全局设置吗?
    • 是的,这有点乏味我曾经把那行放在我不需要测试的 mapStateToProps redux 函数上,你的情况很奇怪,因为在那个项目中我从来没有遇到过任何覆盖问题的默认值道具声明。
    • 是的,对我来说似乎很奇怪......拥有 defaultProps 应该不会影响测试覆盖率......我设法创建了一个解决方法(请参阅我的答案)。但确实不太理想。
    【解决方案2】:

    这似乎是伊斯坦布尔的一个持续问题,有一些解决方法(如@jean182 建议的解决方法)。但是,我想避免从每个文件的 instabul 覆盖范围中排除 defaultProps...

    我通过这样测试 defaultProps 设法获得了 100% 的 Funcs 覆盖率:

    WidgetHeader.defaultProps = {
        title: '',
        subtitle: '',
        lastUpdated: '',
        onUpdateClick: () => {}
    };
    

    然后为它添加测试:

    it( 'should check defaultProps', () => {
        const component = mount( <WidgetHeader /> );
    
        const props = component.props();
    
        expect( props.title ).toEqual( '' );
        expect( props.subtitle ).toEqual( '' );
        expect( props.lastUpdated ).toEqual( '' );
        expect( props.onUpdateClick ).not.toThrow();
    });
    

    如果这是正确的方法,仍然不是 100%。测试每个组件的 defaultProps 似乎很乏味...... 有人有什么建议吗?

    谢谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-07
      • 1970-01-01
      • 2018-05-15
      • 2019-07-12
      相关资源
      最近更新 更多