javascript - 开玩笑的模拟导航服务
问题描述
我正在使用 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))
)
)
);
navigate
是navigationService.navigate
,我从redux-observables
.
测试看起来像这样:
const dependencies = {
ajax: ({ }) => of(mockedResponseFromAjax),
navigate: () => // ???
};
const result$ = loginEpic(action$, state$, dependencies).pipe(toArray());
解决方案
选项 1: - 对我有用的:
import NavigationService from '<your-path>/NavigationService';
beforeEach(() => {
NavigationService.navigate = jest.fn();
});
在我的测试文件中。
选项 2: - 更好的版本
激活模拟很重要,必须jest.mock('../../app/utils/NavigationService');
将它放在测试文件的顶部,直接放在导入后面
推荐阅读
- reactjs - 未处理的拒绝(错误):请求失败,状态码为 404 - Axios,React
- symfony - 如何在easyadmin 3中更改分页
- c - 使用多个文件与多个缓冲区。用什么?
- javascript - 使用 Jest 验证返回
- arduino - 预期的 '}' Arduino
- jquery - 如何在 free-jqgrid 中获取附加字段值?
- c# - Visual Studio 方法调用流转储
- android - 我可以在 android 应用程序(WebView)中使用谷歌表单来创建测验并在其中放置 admob 广告吗
- r - 如何在R中使用字符变量制作直方图
- discord.js - 我收到错误:embed.description 不是函数