SyntaxError:无法在模块外使用 import 语句:运行 Jest-expo 测试时

Posted

技术标签:

【中文标题】SyntaxError:无法在模块外使用 import 语句:运行 Jest-expo 测试时【英文标题】:SyntaxError: Cannot use import statement outside a module: when running Jest-expo tests 【发布时间】:2021-02-22 13:23:41 【问题描述】:

项目的配置。目前在这个项目中使用 jest-expo 进行测试。项目中jest-expo的版本是39.0.0。全局安装的 Jest 版本是 26.6.3

package.json

"scripts": 
    "start": "expo start",
    "android": "expo start --android",
    "ios": "expo start --ios",
    "web": "expo start --web",
    "eject": "expo eject",
    "test": "jest",
    "type": "module"
  ,
...
"devDependencies": 
    "@babel/core": "^7.12.3",
    "babel-preset-expo": "^8.3.0",
    "jest-expo": "^39.0.0",
    "react-test-renderer": "^17.0.1"
  ,
"jest": 
    "preset": "jest-expo"
  

jest.config.js

module.exports = 
    setupFilesAfterEnv: [
      './setup-tests.js',
    ],
    "transformIgnorePatterns": [
      "/node_modules/@codler/react-native-keyboard-aware-scroll-view/lib/index.js",
      "/node_modules/@react-native-community/async-storage/(?!(lib))",
      "/node_modules/native-base-shoutem-theme/.*",
      "node_modules/native-base/.*",
      "node_modules/(?!(jest-)?react-native|react-clone-referenced-element|@react-native-community|expo(nent)?|@expo(nent)?/.*|react-navigation|@react-navigation/.*|@unimodules/.*|unimodules|sentry-expo|native-base|@sentry/.*|native-base-*|native-base-shoutem-*)"
    ],
    verbose : true
  ;

babel.config.js

module.exports = function(api) 
  api.cache(true);
  return 
    presets: ['babel-preset-expo'],
    plugins: ['inline-dotenv'],
  ;
;

我正在尝试为 react-native 的登录页面呈现快照:

错误是由 LoginScreen.js

中的以下导入模块引起的
import 
    Content,
    Container,
    H2,
    Form,
    Item,
    Input,
    Button,
    Text,
    View,
 from "native-base";

LoginScreen.test.js

内的测试用例
import LoginScreen from './LoginScreen';
import React from 'react';
import renderer from 'react-test-renderer';

it('renders LoginScreen correctly', () => 
    const tree = renderer.create(<LoginScreen />).toJSON();
    expect(tree).toMatchSnapshot();
);

测试用例抛出错误

("Object.<anonymous>":function(module,exports,require,__dirname,__filename,global,jest)import connectStyle,  clearThemeCache  from "./src/connectStyle";
                                                                                             ^^^^^^

    SyntaxError: Cannot use import statement outside a module

      at Runtime.createScriptFromCode (node_modules/jest-runtime/build/index.js:1258:14)
      at Object.<anonymous> (node_modules/native-base/src/index.js:1:1)

我已经尝试过 Stack Overflow 上提供的其他类似答案。但它们都没有适用于我正在处理的当前项目。

我已将 connectStyle 添加到 Jest transformIgnorePatterns,但它仍然抛出该错误。

当前项目: 使用 expo 开发的 React 本机移动应用程序。 使用 jest-expo 进行测试。 项目的配置。

尝试卸载并重新安装所有 npm 和 expo 模块,但也没有帮助。

【问题讨论】:

而你的 Jest 版本是......? 目前在这个项目中使用 jest-expo 进行测试。项目中jest-expo的版本是39.0.0。全局安装的 Jest 版本是 26.6.3。 记得把这些细节放在帖子里。这肯定是一个足够新的版本,可以支持最近登陆的所有 ES 模块。查看您收到错误标记的代码:这甚至不是有效代码,它是某种带有非法导入语法的捆绑包,因此除了在这里询问之外,您几乎肯定需要在 expo 问题跟踪器上询问这个问题.这可能只是一个糟糕的错误,但他们是迄今为止最好的人。 当然,迈克,我也会在世博论坛上提出这个问题。感谢您的建议。 这是原生基础的问题。 github.com/GeekyAnts/NativeBase/issues/3084github.com/GeekyAnts/NativeBase/issues/3105 【参考方案1】:

这是原生基础端的一个未解决问题。可以在这张票上找到更多细节:

https://github.com/GeekyAnts/NativeBase/issues/3105

【讨论】:

以上是关于SyntaxError:无法在模块外使用 import 语句:运行 Jest-expo 测试时的主要内容,如果未能解决你的问题,请参考以下文章

Node12/next9 SyntaxError:无法在模块外使用导入语句

SyntaxError:无法在模块外使用 import 语句:运行 Jest-expo 测试时

ASP.NET - 未捕获的 SyntaxError:无法在模块外使用 import 语句

Node.js:语法错误:无法在模块外使用 import 语句

discord.js / typescript / heroku / github:SyntaxError:不能在模块外使用导入语句

Angular.ts 和 Electron:SyntaxError:不能在模块外使用 import 语句