Как проверить негативные действия на тесте? Например, когда происходит сбой вызова API - PullRequest
0 голосов
/ 17 марта 2020

Я пытаюсь проверить свои действия, когда они терпят неудачу. Действия, которые вызывают API.

У меня есть это:

export const loadTips = (tips: TipsModel): LoadTips => ({ tips, type: LOAD_TIPS });

export const fetchTips: ActionCreator<ThunkType> = () => async (dispatch) => {
  return ApiService.getTips(
    tips => dispatch(loadTips(tips)),
    () => dispatch(triggerToast('Tips are not loading. Try again later!', true))
  );
};

И вот те тесты, которые я до сих пор проходил правильно:

import * as actions from './tipsActions';
import { LOAD_TIPS, LoadTips, CLEAR_TIPS, ClearTips, DisableOrSnoozedTips, DISABLE_SNOOZ_TIP } from '../types/tipsTypes';
import getStore from '../services/mockGlobalStore';
import { mocked } from 'ts-jest/utils';
import ApiService from '../services/apiService';

jest.mock('../services/apiService');
const mockedApiService = mocked(ApiService, true);

describe('tips actions on API', () => {
  beforeEach(() => {
    mockedApiService.mockClear();
  });

  const store = getStore();

  it('fetchTips makes API call', () => {
    store.dispatch(actions.fetchTips());

    expect(mockedApiService.getTips).toHaveBeenCalledWith(expect.any(Function), expect.any(Function));
  });
});

describe('tips actions', () => {
  it('creates a loadTips action', () => {
    const expectedAction: LoadTips = { type: LOAD_TIPS, tips: dummyTips };

    expect(actions.loadTips(dummyTips)).toEqual(expectedAction);
  });
});

Итак Я хочу знать, что я могу сделать, чтобы проверить, например, когда действие не выполнено, оно отправит действие:

dispatch(triggerToast('Tips are not loading. Try again later!', true))

Так, как я могу проверить эту часть?

Ответы [ 2 ]

2 голосов
/ 17 марта 2020

В вашем случае это будет то же самое, что и положительное тестирование: вам нужно смоделировать ApiService.getTips, чтобы оно называлось либо «положительный отзыв», либо «отрицательный отзыв». Скажем, сейчас вы не проверяете, что действие fetchTips отправляется при успешном выполнении getTips.

Это было бы что-то похожее (без машинописи):

it('dispatches loadTips on success', () => {
  const mockedResponse = [1,2,3];
  ApiService.getTips.mockImplementation(
    (successCallback, failureCallback) => successCallback(mockedResponse)
  );
  store.dispatch(actions.fetchTips());
  expect(store.getActions()).toContainEqual(actions.loadTips(mockedResponse));
  expect(store.getActions()).not.toContainEqual(
    triggerToast('Tips are not loading. Try again later!', true)
  );
});

it('dispatches toast message on failure', () => {
  ApiService.getTips.mockImplementation(
    (successCallback, failureCallback) => failureCallback()
  );
  store.dispatch(actions.fetchTips());
  expect(store.getActions()).toContainEqual(
    triggerToast('Tips are not loading. Try again later!', true)
  );
  expect(store.getActions()).not.toContainEqual(actions.loadTips(mockedResponse));
});
0 голосов
/ 17 марта 2020

Поскольку это отрицательный тест, вам нужно вызвать API с отрицательными данными. Проверьте реализацию ApiService.getTips и сгенерируйте ошибку. Или Mock ApiService.getTips и выбросить ошибку ( Ошибка вызова callback )

ApiService.getTips(
    tips => dispatch(loadTips(tips)),
    () => dispatch(triggerToast('Tips are not loading. Try again later!', true))
  )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...