打字稿没有在Karma测试中编译

时间:2016-06-24 14:34:32

标签: typescript karma-jasmine systemjs

我想针对Typescript运行业力测试。我已经安装了业力和一切,我可以实际运行测试。

但是,每当我在* .ts文件中使用Typescript语法时,我都会得到这样的语法错误:

  

错误:(SystemJS)语法错误:意外的令牌)

显然我的 TS文件没有被转换。 当我使用纯JS语法时,我的测试运行正常。

这是我的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'
        ]
    });
};

非常感谢你的帮助!

2 个答案:

答案 0 :(得分:1)

这是我的工作配置。

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的提示帮助了我,我也不得不添加元信息。 我希望这也有助于其他人。

答案 1 :(得分:0)

据我所知,SystemJS不是配置项。任何特殊原因包括' SystemJS:....'在你的配置? 删除它并包含files []下的所有文件。您可以使用新模式,只需一行即可提供服务和观看。

相关问题