2

所以我编写了一个自定义轮询钩子,它使用 useContext 和 useLazyQuery 钩子。我想为此编写一个单元测试,它应该涵盖它的返回值状态和副作用。

到目前为止,我已经做到了这么多,但我不太确定如何继续。有小费吗?

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);
  });
});
4

0 回答 0