【发布时间】:2023-03-04 21:08:01
【问题描述】:
我有一个组件,里面有一个选择
<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%。这是一个酶/开玩笑的错误,还是我做错了什么?
PS:我尝试编写一个虚拟测试,我会手动调用handleChange,并且覆盖率达到 100%。所以,这肯定与此有关。
编辑,澄清:正在调用handleChange 函数,测试有效。问题是覆盖并没有计算函数被调用。
【问题讨论】:
-
尝试将
sinon添加到您的测试文件并监视组件。sinon.spy(component.prototype, 'handleChange');在使用shallow()创建组件包装器之前添加此内容@ -
@KyleRichardson 这有什么帮助? sinon 会将函数标记为已覆盖,还是什么?
-
看看这个:sinonjs.org。您正在尝试做的是
sinon的设计目的。 -
@KyleRichardson 但是,正在调用该函数,测试有效。问题是覆盖率不计算函数被调用。
-
对不起,我误会了。不完全确定在这种情况下如何提供帮助。
标签: unit-testing reactjs code-coverage enzyme jestjs