React Native - Jest.mock должен быть встроенной функцией. Компонент тестирования неисправностей, который использует 'withNavigation' - PullRequest
0 голосов
/ 05 ноября 2018

Я использую Jest и Enzyme в своем приложении React Native для тестирования моего компонента, и я продолжаю получать эту ошибку при тестировании babel-plugin-jest-hoist: The second argument of 'jest.mock' must be an inline function. Я действительно не понимаю, что я делаю неправильно, потому что я передаю встроенную функцию.

Вот мой код в моем тестовом файле (search-screen.tests.js):

// All necessary imports here

jest.mock('react-navigation', ({ withNavigation: (component) => component}));

describe("Search screen renders appropriately and function work", () => {
    it("renders correctly", () => {
        const searchScreen = renderer.create(<SearchScreen />).toJSON();
        expect(searchScreen).toMatchSnapshot();
    });
});

Я использовал этот пост переполнения стека для справки

Основная причина, по которой я пытаюсь смоделировать react-navigation, заключается в том, что мой компонент экрана поиска экспортируется с использованием 'withNavigation' (например, так: export default withNavigation(SearchScreen)), и он ломает множество тестов, если я не пытаюсь это сделать это правильно?

Вот и мой файл package.json, просто incase.

{
  "name": "app",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "start": "node node_modules/react-native/local-cli/cli.js start",
    "ios-build": "sh scripts/ios/build-ipa.sh",
    "test": "jest"
  },
  "dependencies": {
    "axios": "0.18.0",
    "prop-types": "15.6.2",
    "react": "16.4.1",
    "react-native": "0.56.0",
    "react-native-cookies": "3.3.0",
    "react-native-elements": "0.19.1",
    "react-native-google-analytics-bridge": "6.0.1",
    "react-native-maps": "0.21.0",
    "react-native-snackbar": "0.5.1",
    "react-native-vector-icons": "4.6.0",
    "react-native-version-number": "0.3.4",
    "react-navigation": "2.9.1",
    "rxjs": "6.2.2"
  },
  "devDependencies": {
    "babel-jest": "23.4.0",
    "babel-preset-react-native": "5.0.2",
    "@babel/core": "^7.0.0-beta.47",
    "@babel/preset-env": "^7.0.0-beta.47",
    "@babel/preset-flow": "^7.0.0-beta.47",
    "babel-core": "^7.0.0-beta.47",
    "babel-eslint": "^8.2.5",
    "babel-loader": "^7.1.5",
    "babel-runtime": "^6.26.0",
    "enzyme": "^3.7.0",
    "enzyme-adapter-react-16": "^1.6.0",
    "jest": "23.4.0",
    "react-dom": "^16.6.0",
    "react-test-renderer": "16.4.1"
  },
  "jest": {
    "preset": "react-native",
    "transformIgnorePatterns": [
      "node_modules/(?!react-native|native-base|react-navigation)"
    ],
    "setupTestFrameworkScriptFile": "./setupTests.js",
    "setupFiles": [
      "./setupTests.js"
    ]
  }
}

Так, что я могу сделать, чтобы прекратить получать ошибку реагирования навигации с Jest? Дайте мне знать, если вам нужна дополнительная информация от меня. Любые идеи будут полезны.

1 Ответ

0 голосов
/ 04 января 2019

Я предполагаю, что проблема в том, что для всех целей и целей вы передаете объект в качестве второго параметра jest.mock. Функция стрелки находится внутри объекта в клавише withNavigation.

Я считаю, что вам нужно передать ему функцию стрелки, которая возвращает тот же объект, например:

jest.mock('react-navigation', () => ({ withNavigation: (component) => component}));

Надеюсь, это поможет! Приветствия.

...