Я пытаюсь протестировать мои собственные компоненты реакции, которые обернуты стеком реакции-навигации createStackNavigator, но стек реагирования-навигации продолжает генерировать эту ошибку
TypeError: Cannot read property 'ThemeContext' of undefined
Я использую @ testing- библиотека /act-native как моя тестовая библиотека, когда я пытаюсь смоделировать стека реакции-навигации с помощью jest
jest.mock('../node_modules/react-navigation-stack', () => {
});
createStackNavigator становится неопределенным, пожалуйста, любая помощь будет оценена
Это мое код
import 'react-native';
import React from 'react';
import { render, fireEvent } from '@testing-library/react-native';
import { createAppContainer, withNavigation } from 'react-navigation';
import { createStackNavigator } from 'react-navigation-stack';
import Login from '../src/components/screens/landing/login';
jest.mock('react-native/Libraries/Animated/src/NativeAnimatedHelper').mock('react-native-gesture-
handler', () => {
const View = require('react-native/Libraries/Components/View/View');
return {
State: {},
PanGestureHandler: View,
BaseButton: View,
Directions: {},
};
});
jest.mock('react-native-keyboard-aware-scroll-view', () => {
const KeyboardAwareScrollView = ({ children }) => children;
return { KeyboardAwareScrollView };
});
jest.mock('native-base', () => {
});
// jest.mock('../node_modules/react-navigation-stack', () => {
// });
jest.mock('react-navigation', () => {
});
console.warn = arg => {
const warnings = [
'Calling .measureInWindow()',
'Calling .measureLayout()',
'Calling .setNativeProps()',
'Calling .focus()',
'Calling .blur()',
];
const finalArgs = warnings.reduce((acc, curr) => (arg.includes(curr) ? [...acc, arg] : acc), []);
if (!finalArgs.length) {
console.warn(arg);
}
};
export const SignedOutNavigator = createStackNavigator({
Login: {
screen: Login,
navigationOptions: {
title: 'Log In',
header: null,
},
},
});
export const SignedInNavigator = createStackNavigator({
Login: {
screen: Login,
navigationOptions: {
title: 'Welcome',
header: null,
},
},
});
function renderWithNavigation({ screens = {}, navigatorConfig = {} } = {}) {
const AppNavigator = createStackNavigator(
{
SignedIn: {
screen: SignedInNavigator,
navigationOptions: {
gesturesEnabled: false,
},
},
SignedOut: {
screen: SignedOutNavigator,
navigationOptions: {
gesturesEnabled: false,
},
},
...screens,
},
{
headerMode: 'none',
mode: 'modal',
initialRouteName: signedIn ? 'SignedIn' : 'SignedOut',
},
{ initialRouteName: 'Home', ...navigatorConfig },
);
const App = createAppContainer(AppNavigator);
return { ...render(<App />), navigationContainer: App };
}
it('renders login', () => {
const { getByText } = renderWithNavigation({
navigatorConfig: { initialRouteName: 'Login' },
});
expect(getByText('Forgot password'));
});