【问题标题】:Testing component that uses react-navigation with Jest使用 Jest 的 react-navigation 测试组件
【发布时间】:2018-02-15 20:37:24
【问题描述】:

我正在开发一个也使用 Redux 的 React Native 应用程序,我想用 Jest 编写测试。我无法模拟 react-navigation 添加的“导航”道具。

这是我的组件:

import React from 'react';
import { connect } from 'react-redux';
import PropTypes from 'prop-types';
import { Text, View } from 'react-native';

const Loading = (props) => {
  if (props.rehydrated === true) {
    const { navigate } = props.navigation;
    navigate('Main');
  }
  return (
    <View>
      <Text>Loading...</Text>
    </View>
  );
};

Loading.propTypes = {
  rehydrated: PropTypes.bool.isRequired,
  navigation: PropTypes.shape({
    navigate: PropTypes.func.isRequired,
  }).isRequired,
};

const mapStateToProps = state => ({
  rehydrated: state.rehydrated,
});

export default connect(mapStateToProps)(Loading);

Loading 组件作为屏幕添加到 DrawerNavigator。

这是测试:

import React from 'react';
import renderer from 'react-test-renderer';
import mockStore from 'redux-mock-store';

import Loading from '../';

describe('Loading screen', () => {

  it('should display loading text if not rehydrated', () => {
    const store = mockStore({
      rehydrated: false,
      navigation: { navigate: jest.fn() },
    });

    expect(renderer.create(<Loading store={store} />)).toMatchSnapshot();

  });
});

当我运行测试时,我收到以下错误:

Warning: Failed prop type: The prop `navigation` is marked as required in `Loading`, but its value is `undefined`.
          in Loading (created by Connect(Loading))
          in Connect(Loading)

关于如何模拟导航属性的任何想法?

【问题讨论】:

    标签: react-native mocking jestjs react-navigation


    【解决方案1】:

    尝试直接通过props传递navigation

    it('should display loading text if not rehydrated', () => {
      const store = mockStore({
        rehydrated: false,
      });
      const navigation = { navigate: jest.fn() };
    
      expect(renderer.create(<Loading store={store} navigation={navigation} />)).toMatchSnapshot();
    });
    

    【讨论】:

      猜你喜欢
      • 2019-09-06
      • 2018-05-08
      • 2017-02-12
      • 1970-01-01
      • 2021-02-04
      • 2021-12-10
      • 2018-08-20
      • 2019-02-24
      相关资源
      最近更新 更多