Unit test for customPollingHook which uses apollo useLazyQuery

Viewed 740

So I have written a custom polling hook which uses useContext and useLazyQuery hooks. I want to write a unit test for this, which should cover its returned values state and side effect.

So far I have managed to do this much but I'm not so sure how to proceed ahead. Any tips?

export const useUploadActivityPolling = (
  teId: TeIdType
): UploadActivityPollingResult => {
  const { dispatch, uploadActivityId }: StoreContextType = useAppContext();

  const [fetchActivityStatus, { error: UploadActivityError, data: UploadActivityData, stopPolling }] = useLazyQuery(
    GET_UPLOAD_ACTIVITY,
    {
      pollInterval: 3000,
      fetchPolicy: 'network-only',
      variables: { teId, activityId: uploadActivityId },
    }
  );

  useEffect(() => {
    if (UploadActivityData) {
      setUploadActivityId(
        UploadActivityData.getUploadActivityStatus.activity_id,
        dispatch
      );
      updateActivityStateAction(UploadActivityData.getExcelUploadActivityStatus.status, dispatch);
    }
  }, [UploadActivityData]);

  return { fetchActivityStatus, stopPolling, UploadActivityError };
};

import React from 'react';
import { mount } from 'enzyme';

const TestCustomHook = ({ callback }) => {
  callback();
  return null;
};

export const testCustomHook = callback => {
  mount(<TestCustomHook callback={callback} />);
};


describe('useUploadActivityPolling', () => {
  let pollingResult;
  const teId = 'some id';

  beforeEach(() => {
    testCustomHook(() => {
      pollingResult = useUploadActivityPolling(teId);
    });
  });

  test('should have an fetchActivityStatus function', () => {
    expect(pollingResult.fetchActivityStatus).toBeInstanceOf(Function);
  });
});
0 Answers
Related