我具有以下Select
组件
getReason = () => {
this.setState({
productsRated: this.state.productsRated + 1
});
};
...
<Select onChange={() => this.getReason()}>
</Select>
getReason
上的值更改时,如何测试<Select/>
已被调用? getReason
方法作为道具? setState
?答案 0 :(得分:1)
我相信更好的方法是针对渲染结果进行验证。
很难回答代码,因为我们看不到this.state.productsRated
的用法。
假设我们只输出this.state.productsRated
:
<Select onChange={this.getReason}
<span id="result">{this.state.productsRated}</span>
那么我们的测试应该是
expect(someWrapper.find('#result').props().children).toEqual(2);
someWrapper.find(Select).props().onChange();
expect(someWrapper.find('#result').props().children).toEqual(3);
我也看不出检查 private 函数是否被调用的任何好处。当测试实施细节时,您的测试将变得脆弱,并且会因实际上不会破坏应用程序的更改而中断。同样,如果应用正常,它也不会增加信心。
PS,对于状态更改,当您使用以前的状态值计算新的状态值时,必须使用setState
的功能版本。相反,可以(并且可能会)使用link对象版本。