You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native中使用react-native-collapsible导致Jest快照测试报错求助

修复react-native-collapsible/Accordion快照测试的模块导入错误

报错SyntaxError: Cannot use import statement outside a module的核心原因是:Jest默认不会转译node_modules目录下的ES模块代码,而react-native-collapsible采用ES模块语法编写,导致Jest无法识别其中的import语句。

具体修复步骤:

  1. 修改jest.config.js,添加transformIgnorePatterns配置
    在你的配置对象中新增transformIgnorePatterns字段,指定Jest需要转译react-native-collapsible包:

    const config = {
      "displayName": 'DIS',
      "bail": 1,
      "preset": "react-native",
      "verbose": true,
      "moduleFileExtensions": ["js","json","ts","tsx"],
      "testPathIgnorePatterns": ['\\.snap$','./__tests__/__mocks__/','../../node_modules/','./lib/','./example/',],
      "setupFiles": ['./jest.setup.js'],
      "snapshotSerializers": ["enzyme-to-json/serializer"],
      "testRunner": 'jest-jasmine2',
      "setupFilesAfterEnv": ["@testing-library/jest-native/extend-expect"],
      "testTimeout": 360000000,
      // 新增以下配置
      "transformIgnorePatterns": [
        "node_modules/(?!(react-native-collapsible|react-native)/)"
      ]
      // "testSequencer": './jest.sequencer.js',
      // "slowTestThreshold": 1,
      // "testResultsProcessor": "./jest.testTesultsProcessor.js"
    };
    

    这个配置的作用是:让Jest不要忽略react-native-collapsible和react-native包的转译(保留react-native是因为默认preset依赖它)。

  2. 若转译无效,尝试手动Mock组件
    如果上述配置仍未解决问题,可以在测试文件中手动MockAccordion组件:

    jest.mock('react-native-collapsible/Accordion', () => {
      const React = require('react');
      const { View } = require('react-native');
      return ({ children }) => <View>{children}</View>;
    });
    

    用简单的View组件替代真实的Accordion,避免加载原包的ES模块代码。

  3. 检查jest.setup.js的冲突配置
    确保jest.setup.js中没有覆盖transformIgnorePatterns或相关转译规则的代码,保持配置一致。

内容的提问来源于stack exchange,提问作者Shirin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 03:57:32