我正在测试一个应处理setInterval函数的react应用。
React方法和测试用例如下(尝试测试createCharts)。
反应方法
createCharts=function(pages,idNumbers){
let pageIds=Object.keys(pages);
let i=0;
let timer=setInterval(()=>{
if(i<pageIds.length){
document.getElementById(pageIds[i]).click();
let charts=pages[pageIds[i]]["charts"];
let ids=Object.keys(charts);
for(let id of ids){
this.idNumbersTransfer((this.state.idNumbers));
}
}
else if(i==pageIds.length){
clearInterval(timer);
}
i++;
},1000)
}
反应测试用例
it("testing function createCharts", () => {
let spy=jest.spyOn(wrapper.instance(),'idNumbersTransfer');
spy.mockImplementation(()=>{
console.log("idNumbersTransfer is called");
})
let pages={
page1:
{
charts:{
BarChart1:{
id:"BarChart1",
idNumber:1,
pageId:"page1"
}
}
}
};
let idNumbers={};
wrapper.instance().createCharts(pages,idNumbers);
expect(spy).toHaveBeenCalled();
spy.mockRestore();
})
我尝试测试createCharts方法,但它既没有调用idNumbersTransfer,也没有进入setInterval方法。有人可以帮忙测试反应中的计时器方法吗?