如何为@react-navigation/drawer编写jest-mock-function?

rou*_*zzz 5 unit-testing reactjs jestjs react-native react-navigation

我在运行时遇到问题,npm test它在终端中显示此错误,并且仅在 @react-navigation/drawer 上发生:

\n\n
\n

\xe2\x97\x8f测试套件运行失败

\n\n
TypeError: (0 , _drawer.createDrawerNavigator) is not a function\n\n  13 | \n  14 | const Stack = createStackNavigator();\n> 15 | const Drawer = createDrawerNavigator();\n     |                ^\n  16 | \n  17 | import AddUser from \'./src/screens/AddUserScreens/AddUser\';\n  18 | import SuccessScreen from \'./src/screens/CommonScreens/Success\';\n\n  at Object.<anonymous> (App.js:15:16)\n  at Object.<anonymous> (__tests__/App-test.js:7:1)\n
Run Code Online (Sandbox Code Playgroud)\n
\n\n

我正在使用jestreact-native-testing-library包,还添加了 jest 设置文件并添加了以下内容:

\n\n
import React from \'react\';\n\njest.mock(\'react-native-reanimated\', () =>\n  require(\'react-native-reanimated/mock\'),\n);\n\njest.mock(\n  \'@react-navigation/drawer\',\n  async () =>\n    await {\n      createDrawerNavigator: jest.fn().mockReturnValue({\n        Navigator: ({children}) => <>{children}</>,\n        Screen: ({children}) => <>{children}</>,\n      }),\n    },\n);\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是我的笑话预设

\n\n
"jest": {\n    "preset": "react-native",\n    "setupFiles": [\n      "./node_modules/react-native-gesture-handler/jestSetup.js",\n      "./jest-setup.js"\n    ],\n    "setupFilesAfterEnv": [\n      "@testing-library/jest-native/extend-expect"\n    ],\n    "transformIgnorePatterns": [\n      "node_modules/(?!(jest-)?react-native|native-base-.*|@react-native-community|@react-navigation)"\n    ],\n    "moduleNameMapper": {\n      "\\\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "<rootDir>/__mocks__/fileMock.js"\n    }\n  }\n
Run Code Online (Sandbox Code Playgroud)\n\n

依赖关系

\n\n
"dependencies": {\n    "@react-native-community/checkbox": "^0.4.1",\n    "@react-native-community/masked-view": "^0.1.10",\n    "@react-navigation/drawer": "^5.8.2",\n    "@react-navigation/native": "^5.5.0",\n    "@react-navigation/stack": "^5.4.1",\n    "native-base": "^2.13.12",\n    "react": "16.11.0",\n    "react-native": "0.62.2",\n    "react-native-gesture-handler": "^1.6.1",\n    "react-native-reanimated": "^1.9.0",\n    "react-native-safe-area-context": "^3.0.2",\n    "react-native-screens": "^2.8.0",\n    "react-native-simple-radio-button": "^2.7.4",\n    "react-native-vector-icons": "^6.6.0"\n  },\n  "devDependencies": {\n    "@babel/core": "^7.6.2",\n    "@babel/runtime": "^7.6.2",\n    "@react-native-community/eslint-config": "^0.0.5",\n    "@testing-library/jest-native": "^3.1.0",\n    "babel-jest": "^24.9.0",\n    "eslint": "^6.5.1",\n    "jest": "^24.9.0",\n    "metro-react-native-babel-preset": "^0.58.0",\n    "react-native-testing-library": "^2.1.0",\n    "react-test-renderer": "16.11.0"\n  },\n
Run Code Online (Sandbox Code Playgroud)\n