Может кто-нибудь помочь, как я должен начать или дать мне абстрактную форму возможных модульных тестов, которые я могу написать - PullRequest
0 голосов
/ 14 января 2020
import service from "Api/service";
import { ROOT_URL, saveError } from "Api";
import {
  FETCH_USER_REQUEST,
  FETCH_USER_FAILURE,
  FETCH_USER_SUCCESS
} from "Constants/redux";
// it fetch the details of an user
export const fetchDetails = () => {
  return (dispatch, getState) => {
    dispatch(fetchDetailsRequest());
    return service
      .get(`${ROOT_URL}/employees/list`)
      .then(response => {
         dispatch(fetchDetailsSuccess(response));
      })
      .catch(error => {
        console.log(error);
        saveError(error, getState());
        dispatch(fetchDetailsFailure(error));
      });
  };
};

export const ffetchDetailsRequest = () => {
  return {
    type:  FETCH_USER_REQUEST
  }
};

export const fetchDetailsSuccess = (res) => {
    return {
      res,
      type: FETCH_USER_SUCCESS
    }
};

export const ffetchDetailsFailure = (err) => {
  return {
    err,
    type:  FETCH_USER_FAILURE
  }
};

// Я новичок в Jest. У меня есть файл ниже. Мне нужно написать модульные тесты для этого. Может ли кто-нибудь // помочь, как я должен начать, или дать мне абстрактную форму возможных модульных тестов, которые я могу написать.

1 Ответ

0 голосов
/ 14 января 2020

Вот что я бы сделал:

import {
  fetchDetailsRequest, fetchDetailsSuccess, fetchDetailsFailure, fetchDetails,
} from './myModule';
import {
  FETCH_USER_REQUEST, FETCH_USER_SUCCESS, FETCH_USER_FAILURE,
} from 'Constants/redux';
import service from 'Api/service';
import { saveError } from 'Api';

jest.mock('Api/service');
jest.mock('Api', () => ({
  ROOT_URL: 'url',
  saveError: jest.fn(),
}));

describe('my_module', () => {
  it('fetchDetailsRequest', () => {
    expect(fetchDetailsRequest()).toEqual({ type: FETCH_USER_REQUEST });
  });

  it('fetchDetailsSuccess', () => {
    const res = 'MyRes';
    expect(fetchDetailsSuccess(res)).toEqual({ res, type: FETCH_USER_SUCCESS });
  });

  it('fetchDetailsFailure', () => {
    const err = 'MyErr';
    expect(fetchDetailsFailure(err)).toEqual({ err, type: FETCH_USER_FAILURE });
  });

  describe('fetchDetails', () => {
    it('success', async () => {
      const response = 'response data';
      service.get.mockResolvedValue(response);
      const dispatch = jest.fn();
      await fetchDetails()(dispatch);
      expect(dispatch).toHaveBeenCalledTimes(2);
      expect(dispatch).toHaveBeenNthCalledWith(1, fetchDetailsRequest());
      expect(dispatch).toHaveBeenNthCalledWith(2, fetchDetailsSuccess(response));
    });

    it('failure', async () => {
      const error = 'response data';
      service.get.mockRejectedValue(error);
      const dispatch = jest.fn();
      const getState = jest.fn();
      const getStateRes = 'stateRes';
      getState.mockImplementation(() => getStateRes);
      await fetchDetails()(dispatch, getState);
      expect(dispatch).toHaveBeenCalledTimes(2);
      expect(dispatch).toHaveBeenNthCalledWith(1, fetchDetailsRequest());
      expect(dispatch).toHaveBeenNthCalledWith(2, fetchDetailsFailure(error));
      expect(saveError).toHaveBeenCalledWith(error, getStateRes);
    });
  });
});
...