打字稿未在 Karma 测试中转译
Typescript not transpiled in Karma tests
我想 运行 针对 Typescript 进行业力测试。我已经安装了 karma 和所有东西,我可以准确地 运行 测试。
但是,每当我的 *.ts 文件中有 Typescript 语法时,我都会收到如下语法错误:
Error: (SystemJS) SyntaxError: Unexpected token )
很明显我的 TS 文件没有被转译。
当我使用纯 JS 语法时,我的测试 运行 ok.
这是我的 karma.conf.js 文件:
module.exports = function(config) {
config.set({
frameworks: ['systemjs', 'jasmine'],
systemjs: {
configFile: 'karma.system.conf.js',
config: {
paths: {
'es6-module-loader': 'src/node_modules/es6-module-loader/dist/es6-module-loader.js',
jasmine: 'src/node_modules/jasmine-core/lib/jasmine-core.js',
systemjs: 'src/node_modules/systemjs/dist/system.js',
'system-polyfills': 'src/node_modules/systemjs/dist/system-polyfills.js',
typescript: 'src/node_modules/typescript/lib/typescript.js',
'plugin-typescript': 'src/node_modules/plugin-typescript/lib/plugin.js'
},
transpiler: 'plugin-typescript'
//transpiler: 'typescript' //I've tried both - same result
},
// Patterns for files that you want Karma to make available, but not loaded until a module requests them. eg. Third-party libraries.
serveFiles: [
'src/**/*.js',
'src/**/*.ts'
]
},
files: [
'test/*.ts'
],
exclude: [
'test/*.SKIP.ts'
]
});
};
非常感谢您的帮助!
据我所知,SystemJS 不是一个配置项。任何特殊原因,包括您的配置中的 'SystemJS:....'?
删除它并将所有文件包含在 files[] 下。您可以使用可以在一行中提供服务和观看的新模式。
这是我的工作配置。
karma.config.js:
/****** karma.config.js ******/
module.exports = function(config) {
config.set({
//logLevel: 'DEBUG',
urlRoot: '/',
frameworks: ['systemjs', 'jasmine'],
plugins: [
'es6-module-loader',
'karma-systemjs',
'karma-jasmine',
],
systemjs: {
configFile: './karma.system.conf.js',
config: {
baseURL: './'
},
// Patterns for files that you want Karma to make available, but not loaded until a module requests them. eg. Third-party libraries.
serveFiles: [
//'apps/**/*.js',
//'src/**/*.ts'
]
// SystemJS configuration specifically for tests, added after your config file.
// Good for adding test libraries and mock modules
// config: {
// paths: {
// 'angular-mocks': 'bower_components/angular-mocks/angular-mocks.js'
// }
// }
},
files: [
'test/unit/*.ts',
'test/unit/*.js',
],
exclude: [
'test/unit/*.SKIP.ts'
]
});
};
karma.system.config.js
/****** karma.system.config.js ******/
System.config({
paths: {
'es6-module-loader': 'node_modules/es6-module-loader/dist/es6-module-loader.js',
'jasmine': 'node_modules/karma-jasmine/*',
systemjs: 'node_modules/systemjs/dist/system.js',
typescript: 'node_modules/typescript/lib/typescript.js',
'plugin-typescript': 'node_modules/plugin-typescript/lib/plugin.js'
},
meta: {
'*.ts': {
format: 'es6'
}
},
packages: {
'src/apps': { defaultExtension: 'ts' }
},
transpiler: 'typescript',
});
TypeScripter 的提示帮助了我,我还必须添加元信息。
我希望这也能帮助其他人。
我想 运行 针对 Typescript 进行业力测试。我已经安装了 karma 和所有东西,我可以准确地 运行 测试。
但是,每当我的 *.ts 文件中有 Typescript 语法时,我都会收到如下语法错误:
Error: (SystemJS) SyntaxError: Unexpected token )
很明显我的 TS 文件没有被转译。 当我使用纯 JS 语法时,我的测试 运行 ok.
这是我的 karma.conf.js 文件:
module.exports = function(config) {
config.set({
frameworks: ['systemjs', 'jasmine'],
systemjs: {
configFile: 'karma.system.conf.js',
config: {
paths: {
'es6-module-loader': 'src/node_modules/es6-module-loader/dist/es6-module-loader.js',
jasmine: 'src/node_modules/jasmine-core/lib/jasmine-core.js',
systemjs: 'src/node_modules/systemjs/dist/system.js',
'system-polyfills': 'src/node_modules/systemjs/dist/system-polyfills.js',
typescript: 'src/node_modules/typescript/lib/typescript.js',
'plugin-typescript': 'src/node_modules/plugin-typescript/lib/plugin.js'
},
transpiler: 'plugin-typescript'
//transpiler: 'typescript' //I've tried both - same result
},
// Patterns for files that you want Karma to make available, but not loaded until a module requests them. eg. Third-party libraries.
serveFiles: [
'src/**/*.js',
'src/**/*.ts'
]
},
files: [
'test/*.ts'
],
exclude: [
'test/*.SKIP.ts'
]
});
};
非常感谢您的帮助!
据我所知,SystemJS 不是一个配置项。任何特殊原因,包括您的配置中的 'SystemJS:....'? 删除它并将所有文件包含在 files[] 下。您可以使用可以在一行中提供服务和观看的新模式。
这是我的工作配置。
karma.config.js:
/****** karma.config.js ******/
module.exports = function(config) {
config.set({
//logLevel: 'DEBUG',
urlRoot: '/',
frameworks: ['systemjs', 'jasmine'],
plugins: [
'es6-module-loader',
'karma-systemjs',
'karma-jasmine',
],
systemjs: {
configFile: './karma.system.conf.js',
config: {
baseURL: './'
},
// Patterns for files that you want Karma to make available, but not loaded until a module requests them. eg. Third-party libraries.
serveFiles: [
//'apps/**/*.js',
//'src/**/*.ts'
]
// SystemJS configuration specifically for tests, added after your config file.
// Good for adding test libraries and mock modules
// config: {
// paths: {
// 'angular-mocks': 'bower_components/angular-mocks/angular-mocks.js'
// }
// }
},
files: [
'test/unit/*.ts',
'test/unit/*.js',
],
exclude: [
'test/unit/*.SKIP.ts'
]
});
};
karma.system.config.js
/****** karma.system.config.js ******/
System.config({
paths: {
'es6-module-loader': 'node_modules/es6-module-loader/dist/es6-module-loader.js',
'jasmine': 'node_modules/karma-jasmine/*',
systemjs: 'node_modules/systemjs/dist/system.js',
typescript: 'node_modules/typescript/lib/typescript.js',
'plugin-typescript': 'node_modules/plugin-typescript/lib/plugin.js'
},
meta: {
'*.ts': {
format: 'es6'
}
},
packages: {
'src/apps': { defaultExtension: 'ts' }
},
transpiler: 'typescript',
});
TypeScripter 的提示帮助了我,我还必须添加元信息。 我希望这也能帮助其他人。