如何解决使用React-Testing库测试上下文提供者时,Apollo useMutation钩挂起
我正在尝试使用react-testing-library
测试上下文提供程序。挂载组件时(即在useEffect
挂钩中),上下文提供程序将预订事件处理程序。当我从act
方法中调用此事件处理程序时,对apollo
突变的任何调用都无法解析。
function ContextProvider() {
const [login] = useMutation(MUTATION);
useEffect(() => {
firebase.auth().onAuthStateChanged(async (user) => {
await login();
// This ^^ mutation never resolves in my test.
});
})
// render context provider.
}
在我的测试用例中,我拦截了提供给firebase.auth().onAuthStateChanged
的事件处理程序,并在呈现组件后与用户调用回调。
jest.mock('firebase');
test('login',async () => {
let changeUser;
firebase.auth.mockReturnValue({
onAuthStateChanged: jest.fn((arg) => {
changeUser = arg;
}),})
render(
<MockedProvider mocks={mocks} addTypename={false}>
<ContextProvider>
<TestComponent />
</ContextProvider>
</MockedProvider>
);
await act(() => {
return changeUser(user);
});
// I never get to this assertion because the login mutation hangs.
expect(screen.getByText('...')).toBeInTheDocument();
});
当我立即在changeUser
内部调用onAuthStateChanged
处理程序时,一切正常。但是对changeUser
的调用现在位于act
禁止的react-testing-library
块之外:
firebase.auth.mockReturnValue({
onAuthStateChanged: jest.fn((changeUser) => {
changeUser(user)
}),})
注意:我遗漏了一些细节,例如使用过的mocks
和user
对象,我坚信这些对象对所描述的场景没有影响。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。