4

我正在使用该包react-native-localize在应用程序中提供本地化。我已经链接了库,它可以在设备上正常运行。

问题:

当我测试一个导入react-native-localize的组件时。我得到错误react-native-localize: NativeModule.RNLocalize is null。为了解决这个空错误,我jest.mock('react-native-localize');在测试文件的顶部调用。但我仍然收到指向NativeModule.RNLocalize is null. 我还提供了包 README中提到的模拟,但无济于事。

import 'react-native';
import React from 'react';
import App from '../App';
// Note: test renderer must be required after react-native.
import renderer from 'react-test-renderer';
import * as RNLocalize from 'react-native-localize';

 // mocking the module here with jest.mock
jest.mock('react-native-localize');

it('renders correctly', () => {
  renderer.create(<App />);
});

问题:

如何解决测试中的 NativeModule.RNLocalize is null 错误?

测试堆栈跟踪:

    FAIL  __tests__/App-test.js
  ● Test suite failed to run

    react-native-localize: NativeModule.RNLocalize is null. To fix this issue try these steps:
    • Run `react-native link react-native-localize` in the project root.
    • Rebuild and re-run the app.
    • If you are using CocoaPods on iOS, run `pod install` in the `ios` directory and then rebuild and re-run the app. You may also need to re-open Xcode to get the new pods.
    • Check that the library was linked correctly when you used the link command by running through the manual installation instructions in the README.
    * If you are getting this error while unit testing you need to mock the native module. Follow the guide in the README.
    If none of these fix the issue, please open an issue on the Github repository: https://github.com/react-native-community/react-native-localize 

      16 | 
      17 | import {NavigationContainer} from '@react-navigation/native';
    > 18 | import * as RNLocalize from 'react-native-localize';
         | ^
      19 | import {Icon} from 'native-base';
      20 | import {createStackNavigator} from '@react-navigation/stack';
      21 | const Stack = createStackNavigator();

      at Object.<anonymous> (node_modules/react-native-localize/lib/commonjs/module.js:17:9)
      at Object.<anonymous> (node_modules/react-native-localize/lib/commonjs/index.js:3:1)
      at Object.<anonymous> (src/modules/AppView.js:18:1)
      at Object.<anonymous> (src/modules/AppViewContainer.js:2:1)
      at Object.<anonymous> (App.js:23:1)
      at Object.<anonymous> (__tests__/App-test.js:7:1)
4

1 回答 1

7

通过在我的 jest 配置文件中添加这些行,我在测试中解决了这个问题

jest.mock("react-native-localize", () => {
  return {
    getLocales: jest.fn(),
    // you can add other functions mock here that you are using
  };
});
于 2020-09-02T13:26:35.383 回答