Typescript项目,使用typescript mocha测试。项目应该从Typescript转换为ES6,然后通过Babel转换为几个可发送的包。
我希望通过Karma(最终BrowserStack)在浏览器中运行所有与babel生成的转换版本相同的测试。
我有karma-typescript + mocha工作,但仅限于es2017兼容的浏览器。问题是在两者之间插入babel 我想我已经尝试过我能想象到的一切,但是:
some/some.js
文件时,它会失败,这似乎只存在于业力记忆中。上述所有内容以及更多内容都有很多变化,但都没有。
karma-babel-preprocessor
我认为这应该是一种正确的方法,所以我发布了一个项目,其中包含我当前的状态:https://github.com/anpur/karma-typescript-babelify。
以下是我karma.conf.js
的一部分:
frameworks: ['mocha', 'karma-typescript'],
preprocessors: {
'src/*.ts': ['karma-typescript', 'babel'],
},
babelPreprocessor: {
options: {
presets: [
[ 'es2015' ]
]
}
},
karmaTypescriptConfig: {
compilerOptions: {
sourceMap: true,
target: 'es6'
},
bundlerOptions: {
addNodeGlobals: true,
sourceMap: true
},
tsconfig: './tsconfig.json'
},
Karma能够转变 - >变换 - >在此设置中捆绑了这个,但我有一整套不同的奇怪问题(没有浏览器在这种状态下工作):
Uncaught Error: Can't find entrypoint
some-test.ts
(mocha在没有babel变换的情况下正常工作)。TypeError: global is undefined
。Unable to get property 'wrappers' of undefined or null reference
。P.S。 - 上述模块/框架都不重要,所以我对任何其他工作设置感到满意,这可以做打字稿 - > babel - > browserstack测试。谢谢!
答案 0 :(得分:2)
我考虑过使用Babel 7编译器进行测试,该编译器本身支持编译TypeScript,并使用较旧的Babel 6编写。
因为我有点好奇,如果它以这种方式工作,我分叉您的回购并提出拉取请求。我还清理了一些设置文件。您可以阅读拉取请求中的更改,以了解所执行的操作。
现在测试似乎按预期通过了,欢呼! heres pull request
@babel/core:^7.0.0
- 编译器babel-core": "^7.0.0-bridge.0
-resolution避免问题 - - 模块引用较旧版本的babel .tsconfig
选项karma.conf
编辑:
我确实相信你可以将Babel加载器从构建线中删除,只需将karma-typescript
-loader参数赋予目标es5。
主流浏览器支持es5一段时间了,也应该在FF 44中使用。在es6中也引入了类,这就是为什么你之前遇到类的问题,编译为es5将类转换为函数。
karmaTypescriptConfig: {
compilerOptions: {
sourceMap: true,
target: 'es5' // <-- this here
答案 1 :(得分:0)
我发现了webpack的替代方法。 所以,业力-> webpack->通天塔。
这里是demo project。 如果您尝试迁移实际项目,则将进行测试。 该项目还解决了运行DOM测试的问题。