【问题标题】:Mock navigation service in jest开玩笑的模拟导航服务
【发布时间】:2018-12-28 04:42:24
【问题描述】:

我正在使用 react-navigation 并在我的代码中调用该服务。虽然我不确定如何模拟 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))
      )
    )
  );

navigatenavigationService.navigate,我从 redux-observables 的依赖项中传递它。

测试看起来像这样:

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

【问题讨论】:

    标签: javascript testing mocking jestjs redux-observable


    【解决方案1】:

    选项 1:- 什么对我有用:

    import NavigationService from '<your-path>/NavigationService';
    
    beforeEach(() => {
        NavigationService.navigate = jest.fn();
    });
    

    在我的测试文件中。

    选项 2:- 更好的版本

    https://stackoverflow.com/questions/55319581/why-isn´t-mock-from-mock-folder-invoked-when-running-test-for-redux-action

    通过jest.mock('../../app/utils/NavigationService'); 激活模拟很重要,它必须放在测试文件的顶部,直接在导入后面

    【讨论】:

      猜你喜欢
      • 2019-11-06
      • 1970-01-01
      • 2020-05-27
      • 2017-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-18
      • 2018-09-14
      相关资源
      最近更新 更多