select 上的酶模拟 ('change') 不会增加功能覆盖率

Enzyme simulate('change') on select does not increase func coverage

我有一个内部有 select 的组件

<select onChange={this.handleChange}>
    {this.props.options.map(this.renderOption)}
</select>

和以下函数

handleChange(e) {
    const element = e.target;
    this.props.onChange.call(null, e, {
        value: element.value,
        label: element.options[element.selectedIndex].textContent,
    });
}

我在 JestEnzyme 中编写了一个测试,如下所示:

const onChange = jest.fn();
// ....
component.find('select').simulate('change');
expect(onChange).toHaveBeenCalled();

问题是我的 % Funcs 覆盖率在这个测试中是 83.33% 因为它认为 handleChange函数未被调用。除此以外,所有其他覆盖率(% Stmts、% Branch、% Lines)均为 100%。这是 enzyme/jest 错误,还是我做错了什么?

PS:我尝试编写一个虚拟测试,我会手动调用 handleChange,覆盖率达到 100%。所以,这肯定与此有关。

编辑,澄清一下:正在调用handleChange函数,测试有效。问题是覆盖率不算函数被调用。

我找到了适合我的情况。

SelectComponent.defaultProps = {
    options: [],
    onChange: () => {},
};

这是因为默认的属性功能。当我进行单元测试时,我将其替换为一个模拟函数,这样该函数就不会被调用,从而使覆盖率不计入它。