【发布时间】:2018-01-29 01:43:34
【问题描述】:
我正在尝试测试组件中的间隔,但它不起作用。
组件:
import React, { Component } from "react";
export const withTimer = WrappedComponent =>enter code here {
class WithTimer extends Component {
constructor(props) {
super(props);
this.state = {
elapsedTime: 0
}
}
componentDidMount() {
this.intervalId = setInterval(
() =>
this.setState(({ elapsedTime }) => ({
elapsedTime: elapsedTime + 1
})),
1000
);
}
componentDidUpdate() {
const { elapsedTime } = this.state;
if (elapsedTime >= 2) {
run_function();
}
}
componentWillUnmount() {
clearInterval(this.intervalId);
}
render() {
return (
<WrappedComponent
elapsedTime={this.state.elapsedTime}
/>
);
}
}
return WithTimer;
};
测试:
describe("<WithTimer />", () => {
const InnerComponent = () => {
return <div>hello</div>;
};
const Comp = withTimer(InnerComponent);
it("updates correctly", () => {
const wrapper = shallow(<Comp />, {lifecycleExperimental: true });
wrapper.update();
jest.useFakeTimers();
jest.advanceTimersByTime(3123);
jest.runAllTimers()
wrapper.update();
expect(setInterval).toHaveBeenCalledTimes(1);
})
});
我尝试了几个组合,但 elapsedTime 没有更新并且 run_function() 没有被触发。 间隔函数是正确模拟的,但它被调用了零次。 我做错了什么?
【问题讨论】: