Unit testing select上的酶模拟(';更改';)不会增加func覆盖率
我有一个组件,里面有一个selectUnit testing select上的酶模拟(';更改';)不会增加func覆盖率,unit-testing,reactjs,code-coverage,enzyme,jestjs,Unit Testing,Reactjs,Code Coverage,Enzyme,Jestjs,我有一个组件,里面有一个select <select onChange={this.handleChange}> {this.props.options.map(this.renderOption)} </select> 我在Jest和Ezyme中写了一个测试,如下所示: const onChange = jest.fn(); // .... component.find('select').simulate('change'); expect(onChange
<select onChange={this.handleChange}>
{this.props.options.map(this.renderOption)}
</select>
我在Jest和Ezyme中写了一个测试,如下所示:
const onChange = jest.fn();
// ....
component.find('select').simulate('change');
expect(onChange).toHaveBeenCalled();
问题是我的%Funcs覆盖率在该测试中为83.33%,因为它认为没有调用handleChange
函数。除此之外,所有其他覆盖率(%Stmts,%Branch,%line)均为100%。这是一个酶/玩笑错误,还是我做错了什么
PS:我试着编写一个虚拟测试,手动调用handleChange
,覆盖率达到100%。所以,这肯定与此有关
编辑,以澄清:正在调用
handleChange
函数,测试正常。问题是覆盖率不计算调用函数的次数。我发现了我的情况
SelectComponent.defaultProps = {
options: [],
onChange: () => {},
};
这是因为默认的属性函数。当我进行单元测试时,我将其替换为一个模拟函数,因此该函数从未被调用,从而使覆盖率不计算在内。尝试将
sinon
添加到您的测试文件中,并监视该组件<代码>sinon.spy(component.prototype,'handleChange')代码>在使用shallow()
@KyleRichardson创建组件包装器之前添加此选项,这有什么帮助?sinon是要将函数标记为已覆盖,还是什么?请检查此项:。您试图做的是sinon的设计目的。@KyleRichardson但是,函数正在被调用,测试工作正常。问题是覆盖率不包括函数被调用。对不起,我误解了。不确定在这种情况下如何提供帮助。对我来说,在测试中调用默认函数是至关重要的。所以仅仅检查onChange
是否为空是不够的,我必须调用onChange()
。
SelectComponent.defaultProps = {
options: [],
onChange: () => {},
};