pra*_*n s 6 mocking setinterval reactjs jestjs
我想模拟 setInterval 方法并且应该覆盖 getData 方法中的行。有人可以帮我解决这个问题。
startInterval() {
setInterval(() => this.getData(), this.state.timeInterval);
}
getData(){
// i want to covet this lines
}
Run Code Online (Sandbox Code Playgroud)
我试过如下
it('should call getTopIntentsSince', () => {
jest.useFakeTimers();
jest.runAllTicks();
})
Run Code Online (Sandbox Code Playgroud)
Bri*_*ams 15
jest.runAllTicks
运行微任务队列中的所有内容。
对于setInterval
连续运行的a ,您需要使用jest.advanceTimersByTime
.
这是一个简单的例子:
代码.js
import * as React from 'react';
export class MyComponent extends React.Component {
constructor(...args) {
super(...args);
this.state = { calls: 0, timeInterval: 1000 };
this.startInterval();
}
startInterval() {
setInterval(() => this.getData(), this.state.timeInterval);
}
getData() {
this.setState({ calls: this.state.calls + 1 });
}
render() { return null; }
}
Run Code Online (Sandbox Code Playgroud)
代码.test.js
import * as React from 'react';
import { MyComponent } from './code';
import { shallow } from 'enzyme';
test('MyComponent', () => {
jest.useFakeTimers();
const component = shallow(<MyComponent/>);
expect(component.state('calls')).toBe(0); // Success!
jest.advanceTimersByTime(3000);
expect(component.state('calls')).toBe(3); // Success!
})
Run Code Online (Sandbox Code Playgroud)
如果您取消间隔使其不会连续运行,那么您也可以使用jest.runAllTimers
.
归档时间: |
|
查看次数: |
10304 次 |
最近记录: |