gpt4 book ai didi

reactjs - 使用 Jest 测试用例模拟 React 中的 setInterval 方法

转载 作者:行者123 更新时间:2023-12-03 14:06:25 24 4
gpt4 key购买 nike

我想模拟 setInterval 方法,并且应该覆盖 getData 方法中插入的行。有人可以帮我解决这个问题吗?

startInterval() {
setInterval(() => this.getData(), this.state.timeInterval);
}

getData(){
// i want to covet this lines
}

我已经尝试过如下

it('should call getTopIntentsSince', () => {
jest.useFakeTimers();
jest.runAllTicks();
})

最佳答案

jest.runAllTicks运行微任务队列中的所有内容。

对于连续运行的setInterval,您需要使用 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; }
}

代码.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!
})
<小时/>

如果您取消间隔,使其不会连续运行,那么您还可以使用 jest.runAllTimers .

关于reactjs - 使用 Jest 测试用例模拟 React 中的 setInterval 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55998217/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com