Ложный навигационный сервис в шутку - PullRequest
0 голосов
/ 28 декабря 2018

Я использую реагирующую навигацию и вызываю эту службу в своем коде.Хотя я не уверен, как издеваться над функцией navigate.Вот мой код:

import { NavigationActions } from 'react-navigation';

let _navigator;

function setTopLevelNavigator(navigatorRef) {
  _navigator = navigatorRef;
}

function navigate(routeName, params) {
  _navigator.dispatch(
    NavigationActions.navigate({
      routeName,
      params,
    })
  );
}

// add other navigation functions that you need and export them

export default {
  navigate,
  setTopLevelNavigator,
};

Вот что я получил до сих пор:

export const loginEpic = (action$, state$, { ajax, navigate }) =>
  action$.pipe(
    ofType(LOGIN_REQUEST),
    map(() => state$.value),
    switchMap((options) =>
      ajax(options).pipe(
        pluck("response"),
        map((res) => loginSuccess(res)),
        tap((r) => navigate(ROUTES.DASHBOARD_SCREEN))
      )
    )
  );

navigate равно navigationService.navigate, и я передаю его из зависимостей redux-observables.

Тест выглядит так:

const dependencies = {
      ajax: ({ }) => of(mockedResponseFromAjax),
      navigate: () => // ??? 
    };
    const result$ = loginEpic(action$, state$, dependencies).pipe(toArray());

1 Ответ

0 голосов
/ 24 марта 2019

Вариант 1: - Что сработало для меня:

import NavigationService from '<your-path>/NavigationService';

beforeEach(() => {
    NavigationService.navigate = jest.fn();
});

в моем тестовом файле.

Вариант 2: - Лучшая версия

см. /9269645/pochemu-pri-zapuske-testa-na-izbytochnoe-deistvie-ne-vyzyvaetsya-maket-iz-papki-mock´t-mock-from-mock-folder-invoked-when-running-test-for-redux-action

важно, чтобы вы активировали макет с помощью jest.mock('../../app/utils/NavigationService');, это должно быть расположено в верхней части файла теста непосредственно за импортом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...