Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing select上的酶模拟(';更改';)不会增加func覆盖率_Unit Testing_Reactjs_Code Coverage_Enzyme_Jestjs - Fatal编程技术网

Unit testing select上的酶模拟(';更改';)不会增加func覆盖率

Unit 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

<select onChange={this.handleChange}>
    {this.props.options.map(this.renderOption)}
</select>
我在JestEzyme中写了一个测试,如下所示:

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: () => {},
};