При тестировании собственного компонента реагирования с помощью стека реакции-навигации createStackNavigator выдает ошибку - PullRequest
0 голосов
/ 17 февраля 2020

Я пытаюсь протестировать мои собственные компоненты реакции, которые обернуты стеком реакции-навигации 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'));
    });
...