开玩笑/酶。测试该方法是否被调用

时间:2019-06-30 22:15:50

标签: reactjs jestjs enzyme

我具有以下Select组件

getReason = () => {
        this.setState({
            productsRated: this.state.productsRated + 1
        });
};
...
<Select onChange={() => this.getReason()}>
</Select>
  1. 当我模拟getReason上的值更改时,如何测试<Select/>已被调用?
  2. 我应该完全测试私有方法还是应该通过getReason方法作为道具?
  3. 如果我应该作为道具通过,我怎么称呼setState

1 个答案:

答案 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对象版本。