jest + typescript + es6 模块(又一次,2019 年)- SyntaxError: Unexpected token export

Posted

技术标签:

【中文标题】jest + typescript + es6 模块(又一次,2019 年)- SyntaxError: Unexpected token export【英文标题】:jest + typescript + es6 modules (yet again, 2019) - SyntaxError: Unexpected token export 【发布时间】:2019-07-09 17:59:09 【问题描述】:

我在尝试使用 jest、typescript 和 es6 模块时仍然遇到问题。我的测试是用 Typescript 编写的,我正在尝试从使用 es6 模块的 js 文件中导入对象。为此,我关注了jest documentation,并在位于项目根目录的 babel.config.js 中有以下内容:

module.exports = 
presets: [
    [
        '@babel/preset-env',
        
            targets: 
                node: 'current'
            
        
    ]
]

;

我安装了以下依赖项:

"devDependencies": 
  "@babel/core": "^7.2.2",
  "@babel/preset-env": "^7.3.1",
  "@types/jest": "^23.3.13",
  "@types/node": "^10.12.18",
  "babel-jest": "^24.1.0",
  "jest": "^23.6.0",
  "rollup": "^1.1.2",
  "rollup-plugin-terser": "^4.0.4",
  "rollup-plugin-typescript2": "^0.19.2",
  "ts-jest": "^23.10.5",
  "ts-node": "^8.0.1",
  "typescript": "^3.2.4"

在 jest.config.js 我有以下内容:

module.exports = 
verbose: true,
transform: 
    "^.+\\.jsx?$": "babel-jest",
    '^.+\\.ts?$': 'ts-jest'
,
testEnvironment: 'node',
testRegex: '/test/.*\\.(test|spec)?\\.(ts|tsx)$',
moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node']
;

最后,我试图在我的测试中像这样导入:

import Dag, Directions from "../dist/dag";

这里说:SyntaxError: Unexpected token export

D:\devel\tomtom_dag\dist\dag.js:72
();export  e as Directions, t as Action, n as Dag ;

有人可以说我做错了什么或指向具有类似配置的项目吗?是的,我已经在谷歌上搜索了几个小时,并尝试了 here、here 的解决方案,并尝试使用 this 插件 - 结果相同=(

更新: 我创建了一个项目来重现该问题: https://github.com/AntonPilyak/jest_typescript_es6 另外,我注意到我忘记提及我正在尝试使用 jest@23 版本,因为 ts-jest 无法使用最新版本(发出警告 + 我得到一个空的测试套件)。也许,我的问题来自这个事实。但是,我仍然无法进行正确的配置:如果我使用最新的玩笑,我会收到警告 + 玩笑说测试套件是空的,并且测试通过了,尽管它不应该通过。

【问题讨论】:

我没有使用您正在使用的确切堆栈,但我有一些包。 SyntaxError: Unexpected token export 有意义,因为它表示在 JS 文件中找到了 TS:D:\devel\tomtom_dag\dist\dag.js:72();export *e as Directions, t as Action, n as Dag* ;。从您提供的信息中我看不出这是为什么,但这是您可以遵循的线索。 @AndyJ,不,JS 文件中没有 TS,反之亦然 - 我使用 Rollup 创建捆绑包,其中目标格式为“esm”(ES6 模块),捆绑包包含有效的 JS + 文件与同一文件夹中的类型。然后我尝试在我的测试中从包中导入对象(确实是 TS,但因为我使用的是 ts-jest,所以应该没问题。 @AndyJ,NP,感谢您的帮助=) FWIW 我很难重现这个问题。您能否分享一个因错误而失败的完整最小代码库? 你有 jest v^23.6.0 和 babel-jest v^24.1.0,也许使用 23.x 版本的指南配置 jest? 【参考方案1】:

它适用于 ts-jest 24 + 它似乎是我的 IDE 中的一个错误:https://youtrack.jetbrains.com/issue/IDEA-207553

【讨论】:

以上是关于jest + typescript + es6 模块(又一次,2019 年)- SyntaxError: Unexpected token export的主要内容,如果未能解决你的问题,请参考以下文章

为 Typescript、es6 和 Webpack 2 配置 Jest

Jest Manual Mocks with React 和 Typescript:模拟 ES6 类依赖

使用 Typescript 从 Jest 手动模拟中导入函数

为 react typescript 项目设置 ts-jest

无法在基于 jest 和 vue-test-utils 的测试项目中使用 vue.js 的 ES6 模块

LayaBox---TypeScript---结构