Enzyme Mock ToastAndroid React Native组件。

问题描述 投票:3回答:1

我正在测试一个在方法中使用ToastAndroid组件的react原生组件,当我使用酶测试时,我一直得到错误提示 TypeError: _reactNative.ToastAndroid.show is not a function

我使用的是 react-native-mock-renderer 我的组件有一个方法被调用的onPress handler。

 validateAndProceed = () => {
    ToastAndroid.show(
        'Show toast',
        ToastAndroid.SHORT,
      );
  };

和我的测试来验证

it('should validate and process', () => {
    const wrapper = shallow(<Component
    />);
    const instance = wrapper.dive().instance();
    jest.spyOn(instance, 'validateAndProceed');
    instance.validateAndProceed();
    expect(instance.validateAndProceed).toHaveBeenCalled();
  });

我为ToastAndroid创建了一个自定义的模拟。

const ToastAndroid = {
  SHORT: '',
  LONG: '',

  TOP: '',
  BOTTOM: '',
  CENTER: '',

  show: jest.fn(),
  showWithGravity: jest.fn(),
  showWithGravityAndOffset: jest.fn(),
};

module.exports = ToastAndroid;

仍然是一个不工作的

unit-testing react-native jestjs enzyme
1个回答
0
投票

你不需要对整个模块进行嘲讽。我只需要模拟相关的函数和常量就可以了。

例如:_reactNative.ToastAndroid.show不是我的函数......你不需要模拟整个模块,只需要模拟相关的函数和常量就可以了。

ToastAndroid.showWithGravity = jest.fn();
ToastAndroid.show = jest.fn(); 
© www.soinside.com 2019 - 2024. All rights reserved.