我有一个非常简单的问题:“如何用笑话来配置打字稿”。我知道这里有很多资源。但是没有一个解决方案对我有用。
这是我的jest.config.js
:
module.exports = {
roots: [
'<rootDir>'
],
transform: {
"^.+\\.ts$": "ts-jest"
},
testMatch: ['<rootDir>/tests/**/*.ts'],
moduleFileExtensions: ['ts', 'js'],
modulePaths: [
'<rootDir>/src/js/'
],
moduleNameMapper: {
'Services(.*)': '<rootDir>/src/js/$1'
},
};
第一个问题是模块名称映射器不起作用。我同时添加了modulePaths
和moduleNameMapper
,但没有一个起作用。简单地说:“找不到模块...”。
另一个问题是,当我伪造模块名称映射器(例如'i': '<rootDir>/src/js/State.ts'
并使其工作时,我具有“意外的令牌导出”。但是我遵循了本指南https://basarat.gitbooks.io/typescript/docs/testing/jest.html,并且我使用了相同的代码就像该示例一样。我尝试使用babel开玩笑-相同。
当然,我尝试了谷歌搜索。但是没有成功。我尝试了不同的方法-没有结果。 我花了将近2个小时。我知道应该有一个简单的解决方案,因为笑话和打字稿是很受欢迎的软件包。
更新: 这是我的tsconfig.js
{
"compilerOptions": {
"outDir": "./dist/",
"noImplicitAny": true,
"module": "es2015",
"target": "es5",
"jsx": "react",
"allowJs": true
}
}
答案 0 :(得分:1)
根据您提供的信息,我认为问题是双重的:
moduleNameMapper
正则表达式Unexpected token export
可能表示错误的tsconfig.json
配置(例如module
) 1。)用regex boundaries 'Services(.*)'
包裹^$
,得到'^Services(.*)$'
。否则会导致奇怪的错误,因为替换了模块名称的 all 个匹配子字符串。
另外,我不确定您是否很想'^Services/(.*)$'
(包括“ /”)吗?当您的虚拟替换别名更改错误类型时,您的配置似乎具有不正确的正则表达式匹配项,但在其他方面也可以使用。
2。)如果没有特殊标志,节点将无法理解ES模块语法。您的错误表明,可能缺少从import/export
到CommonJS require
的转换步骤。如果设置为module
,请检查tsconfig.json
/测试配置中的"CommonJS"
属性。考虑取决于target
属性target === "ES3" or "ES5" ? "CommonJS" : "ES6"
的{{3}}值。
如果在baseUrl
中使用paths
和tsconfig.json
别名配置,请确保还要在jest config中设置default。这有点多余,因此ts-jest
提供了一个moduleNameMapper来从TS config中提取值。您可以看看helper。
希望,这样可以解决您的问题,否则,完整的代码示例将对您有所帮助。