'Testing function that use useQuery @apollo/client with Jest
I am trying to unit test my function that call useQuery from @apollo/client.
Here's what I have done
getPixelID.ts
import { useQuery } from '@apollo/client';
import { GET_PIXEL_ID } from '../query';
export const GetPixelID = (brandId:string) => {
const { data } = useQuery(GET_PIXEL_ID, {
variables: {
input: {
brandId: brandId,
},
fetchPolicy: 'network-only',
},
onCompleted: () => {
console.log('Complete Fetching PixelID:', data);
},
onError: (error) => {
console.error(`Error getting PixelID. ${error.message}`);
},
});
return data?.facebookPixelId?.pixelId;
};
getPixelID.test.ts
import { GetPixelID } from '../helpers/getPixelID';
import { renderHook } from '@testing-library/react-hooks';
import { MockedProvider } from '@apollo/client/testing';
jest.mock('@apollo/react-hooks', () => {
const data = {
facebookPixelId: {
pixelId: '123',
},
};
return {
__esModule: true,
useQuery: jest.fn(() => ({ data })),
};
});
describe('Test GetPixelID', () => {
it('Successfully fetching PixelID', () => {
const { result } = renderHook(() => GetPixelID('123'), {
wrapper: MockedProvider
});
expect(result.current).toBeTruthy();
});
});
But it always show this
As far as I know, useQuery need to be wrapped inside ApolloClient (in this case is MockedProvider), but I don't why it doesn't run. Trying to remove the wrapper will show another error that "no Apollo Client is found", Any help?
Solution 1:[1]
I'm a bit late to the party but the issue probably occurs because you're mocking the wrong hook. In your component you import useQuery from @apollo/client.
import { useQuery } from '@apollo/client'
But in your test, you're trying to mock useQuery from @apollo/react-hook.
jest.mock('@apollo/react-hooks', () => {...}
Simply changing this to jest.mock('@apollo/client', () => {...}
should fix it.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | root |