Javascript 如何检查Jest和Ezyme中设置超时后状态是否已更改

Javascript 如何检查Jest和Ezyme中设置超时后状态是否已更改,javascript,reactjs,jestjs,enzyme,Javascript,Reactjs,Jestjs,Enzyme,我试图检查,看看在一个函数在Jest和Ezyme中运行后,状态是否相应地发生了变化。此函数中有一个setTimeout,它调用另一个函数,具体取决于函数更改或不更改状态的结果。我还努力在setTimeout函数中获得行覆盖率 目前,我有一个onStart回调函数,它作为一个道具传递给一个组件。在这里,它可以检查当前状态,如果showAuth设置为true,那么show和customCSS的值将相应地更改 function onStart(){ const that = this; set

我试图检查,看看在一个函数在Jest和Ezyme中运行后,状态是否相应地发生了变化。此函数中有一个setTimeout,它调用另一个函数,具体取决于函数更改或不更改状态的结果。我还努力在setTimeout函数中获得行覆盖率

目前,我有一个onStart回调函数,它作为一个道具传递给一个组件。在这里,它可以检查当前状态,如果showAuth设置为true,那么show和customCSS的值将相应地更改

function onStart(){
  const that = this;
  setTimeout(() => {
    if(that.state.showAuth){
      this.setState({ shown: true, customCSS: `visible` })
    }
  }, 100);
}
此函数作为道具传递给以下组件

  <CheckUser
    onSuccess={responseHandler}
    onStart={onStart}
  />

如果showAuth在状态为true,组件将获取信息并呈现一个弹出窗口

到目前为止,对于我的测试,我有:

describe('onStart', () => {
    const wrapper = shallow(<UserInformation />);

/*the component I'm making a shallow copy of has the CheckUser component as a child*/

    it('runs setTimeout', () => {
      jest.useFakeTimers();
      wrapper.instance().onActivate()
      expect(setTimeout).toHaveBeenCalledTimes(1);
    });
})
description('onStart',()=>{
常量包装器=浅();
/*我正在制作浅层副本的组件将CheckUser组件作为子组件*/
它('运行设置超时',()=>{
开玩笑。使用faketimers();
wrapper.instance().onActivate()
expect(setTimeout).toHaveBeenCalledTimes(1);
});
})
现在,测试通过了,但是setTimeout中的行没有覆盖。我也不确定如何准确地检查状态是否已更改,但目前我正试图准确地关注如何在
onStart()

我还想指出的是,在应用程序中,一切都按照我希望的方式运行,我关心的只是测试覆盖率


谢谢大家!

因为setState是异步的。您可以在setState this.setState({show:true,customCSS:
visible
},function(){//action here})中传递回调。您是否尝试在chrome调试工具中调试测试用例?只需确保您的测试在setTimeout()内输入,因为如果它没有输入,则可能需要更改呈现方法而不是浅层呈现,或者需要在jest.useFakeTimers()内设置一些阈值。您可以使用执行超时回调。因为setState是异步的。您可以在setState this.setState({show:true,customCSS:
visible
},function(){//action here})中传递回调。您是否尝试在chrome调试工具中调试测试用例?只需确保您的测试在setTimeout()内输入,因为如果它没有输入,则可能需要更改渲染方法而不是浅层渲染,或者需要在jest.useFakeTimers()内设置一些阈值。您可以使用来执行超时回调。