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
对象,我坚信这些对象对所描述的场景没有影响