我正在使用NumericInput,当我在设备上运行应用程序时,它可以正常工作。
但是,当我运行时jest,会遇到各种错误:
jest
TypeError: Cannot read property 'default' of undefined at new Icon (node_modules/react-native-vector-icons/lib/create-icon-set.js:42:389) at constructClassInstance (node_modules/react-test-renderer/cjs/react-test-renderer.development.js:3435:18) at updateClassComponent (node_modules/react-test-renderer/cjs/react-test-renderer.development.js:6606:5) at beginWork (node_modules/react-test-renderer/cjs/react-test-renderer.development.js:7563:16) at performUnitOfWork (node_modules/react-test-renderer/cjs/react-test-renderer.development.js:11234:12) at workLoop (node_modules/react-test-renderer/cjs/react-test-renderer.development.js:11266:24) at renderRoot (node_modules/react-test-renderer/cjs/react-test-renderer.development.js:11349:7) at performWorkOnRoot (node_modules/react-test-renderer/cjs/react-test-renderer.development.js:12237:7) at performWork (node_modules/react-test-renderer/cjs/react-test-renderer.development.js:12149:7) at performSyncWork (node_modules/react-test-renderer/cjs/react-test-renderer.development.js:12123:3)
和
console.error node_modules/react-test-renderer/cjs/react-test-renderer.development.js:9036 The above error occurred in the <Icon> component: in Icon (at NumericInput.js:226) in View (created by View) in View (at createAnimatedComponent.js:151) in AnimatedComponent (at TouchableOpacity.js:282) in TouchableOpacity (at Button.js:18) in Button (at NumericInput.js:225) in View (created by View) in View (at NumericInput.js:224) in NumericInput in View (created by View) in View in View (created by View) in View (at ScrollViewMock.js:29) in RCTScrollView (created by _class) in _class (at ScrollViewMock.js:27) in ScrollViewMock (created by App) in App Consider adding an error boundary to your tree to customize error handling behavior. Visit https://.../react-error-boundaries to learn more about error boundaries.
第一个问题 :那正常吗?
第二个问题 :如果是,我该如何嘲笑NumericInput?
NumericInput
遵循本指南,看来我需要做:
jest.mock('react-native-numeric-input', () => 'NumericInput');
但这是行不通的。我也尝试过:
jest.mock('react-native-vector-icons', () => 'Icon');
没有成功。
o_0这是怎么回事?
干杯!
这是react-native正式的笑话预处理器存在的问题。
react-native
这是我开玩笑的配置文件:
const { defaults } = require('jest-config'); module.exports = { preset: 'react-native', transform: { '^.+\\.js$': '<rootDir>/node_modules/react-native/jest/preprocessor.js', '^.+\\.tsx?$': 'ts-jest' }, moduleFileExtensions: [ 'tsx', ...defaults.moduleFileExtensions ], };
为了解决这个问题,这是我的新玩笑配置文件:
const { defaults } = require('jest-config'); module.exports = { preset: 'react-native', transform: { '^.+\\.tsx?$': 'ts-jest' }, moduleFileExtensions: [ 'tsx', ...defaults.moduleFileExtensions ], };
使用'react- native'预设时,您不需要玩笑的预处理程序转换项。有关更多信息。
'react- native'