为什么Karma没有按照我的预期来编译TS

时间:2017-03-12 15:00:42

标签: typescript karma-runner

我正在尝试将karma / jasmine添加到我一直在处理的旧项目中,以便我可以开始将单元测试添加到我的TypeScript代码中。

我遇到的问题是业力在编译文件时丢失了一些模块/命名空间引用。

TS来源:

/// <reference path="../../app.ts" />
module App.Module {
    'use strict';

    class MyClass extends BaseClass {

        constructor() {
            super();
        }
}

内置(我使用gulp任务):

var App;
(function (App) {
    var Module;
    (function (Module) {
       'use strict';
            var MyClass = (function (_super) {
                __extends(BaseClass, _super);
                function MyClass() {
                    var _this = _super.call(this) || this;
                    return _this;
                }
                return MyClass;
            }(App.BaseClass));
    })(Module = App.Module || (App.Module = {}));
})(App || (App = {}));

使用Karma(typescriptPreprocessor)构建:

var App;
(function (App) {
    var Module;
    (function (Module) {
       'use strict';
            var MyClass = (function (_super) {
                __extends(BaseClass, _super);
                function MyClass() {
                    var _this = _super.call(this) || this;
                    return _this;
                }
                return MyClass;
            }(BaseClass));
    })(Module = App.Module || (App.Module = {}));
})(App || (App = {}));

不同之处在于我的普通输出将BaseClass限定为App.BaseClass,并且能够找到它。

作为测试,我更改了TS代码以扩展App.BaseClass,而Karma生成的代码正确,并且能够在没有错误的情况下运行,但我不想要必须通过我的整个申请完全符合每个参考资格。

我可以在业力设置中做些什么修复这个?

karma.config.js

module.exports = function (config) {
    config.set({
        basePath: '',
        frameworks: ['jasmine'],
        files: [
            'App/**/*.ts'
        ],
        preprocessors: {
            '**/*.ts': ['typescript']
        },
        typescriptPreprocessor: {
            transformPath: function (path) {
                return path.replace(/\.ts$/, '.js');
            }
        },
        reporters: ['progress'],
        port: 9876,
        colors: true,
        logLevel: config.LOG_INFO,
        autoWatch: true,
        browsers: ['Chrome'],
        singleRun: false,
        concurrency: Infinity,
        mime: {
            'text/x-typescript': ['ts', 'tsx']
        }
    });
}

1 个答案:

答案 0 :(得分:0)

我找到了一个解决方案,通过创建一个可以观察TS文件并捆绑它们的gulp任务,当Karma运行时,然后我得到业力来观看该捆绑,而不是尝试使用TS。

gulp.task('tdd', function (done) {
    new karma.Server({
        configFile: __dirname + '/karma.conf.js',
        singleRun: false
    }, done).start();

    return watch(tsFiles, function () {
        console.info('TS changed');
        gulp.src([tsFiles])
            .pipe(ts({ out: 'testbundle.js', target: 'es5', removeComments: true }))
            .pipe(gulp.dest('./App/tests'));
    });
});