Javascript Apollo在使用react测试库测试上下文提供程序时使用挂起

Javascript Apollo在使用react测试库测试上下文提供程序时使用挂起,javascript,reactjs,jestjs,react-testing-library,Javascript,Reactjs,Jestjs,React Testing Library,我正在尝试使用react测试库测试上下文提供程序。当组件装载时(即在useffecthook中),上下文提供程序订阅事件处理程序。当我从act方法中调用此事件处理程序时,对apollo突变的任何调用都不会解析 function ContextProvider(){ const[login]=使用变异(变异); useffect(()=>{ firebase.auth().onAuthStateChanged(异步(用户)=>{ 等待登录(); //这种变异在我的测试中永远不会解决。 }); })

我正在尝试使用
react测试库
测试上下文提供程序。当组件装载时(即在
useffect
hook中),上下文提供程序订阅事件处理程序。当我从
act
方法中调用此事件处理程序时,对
apollo
突变的任何调用都不会解析

function ContextProvider(){
const[login]=使用变异(变异);
useffect(()=>{
firebase.auth().onAuthStateChanged(异步(用户)=>{
等待登录();
//这种变异在我的测试中永远不会解决。
});
})
//呈现上下文提供程序。
}
在我的测试用例中,我截取提供给
firebase.auth().onAuthStateChanged
的事件处理程序,并在呈现组件后与用户一起调用回调

jest.mock('firebase');
测试('login',async()=>{
让用户改变;
firebase.auth.mockReturnValue({
onAuthStateChanged:jest.fn((arg)=>{
changeUser=arg;
}),
})
渲染(
);
等待行动(()=>{
返回changeUser(用户);
});
//我从来没有得到这个断言,因为登录变异挂起。
expect(screen.getByText(“…”).toBeInTheDocument();
});
当我在
onAuthStateChanged
中立即调用
changeUser
处理程序时,一切正常。但是对
changeUser
的调用现在位于
act
块之外,该块被
react测试库
禁止:

  firebase.auth.mockReturnValue({
    onAuthStateChanged: jest.fn((changeUser) => {
      changeUser(user)
    }),
  })
注意:我遗漏了一些细节,比如使用的
mock
user
对象,我坚信这些对象对所描述的场景没有影响