我正在使用 Jest 和 Enzyme 测试 React 组件,并且难以测试去抖动函数是否被正确调用(或根本调用)。我已经简化了下面的组件代码(经过编辑以使代码更简单),此处链接到 codepen
// uses lodash debounce
class MyApp extends React.Component {
constructor(props) {
super()
this.state = {name: "initial value"};
this.debouncedFunction = _.debounce(this.debouncedFunction, 3000);
this.handleClick = this.handleClick.bind(this)
}
debouncedFunction () {
this.setState({name: "after delay, updated value"});
}
handleClick() {
this.debouncedFunction();
}
render() {
return (
<div>
<p>{this.state.name}</p>
<button onClick={this.handleClick}>
click for debounced function
</button>
</div>
);
}
}
我认为去抖动函数测试应该与非去抖动函数测试非常相似,但带有一个setTimeout
or Promise
(expect
在.then
or 中带有断言.finally
)。在尝试了采用这两种想法的多种测试变体之后,我不再那么确定了。有任何想法吗?