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,
});
}
我在 Jest 和 Enzyme 中编写了一个测试,如下所示:
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: () => {},
};
这是因为默认的属性功能。当我进行单元测试时,我将其替换为一个模拟函数,这样该函数就不会被调用,从而使覆盖率不计入它。
我有一个内部有 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,
});
}
我在 Jest 和 Enzyme 中编写了一个测试,如下所示:
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: () => {},
};
这是因为默认的属性功能。当我进行单元测试时,我将其替换为一个模拟函数,这样该函数就不会被调用,从而使覆盖率不计入它。