【问题标题】:Why is Karma not compiling TS how I expect it为什么 Karma 没有按照我的预期编译 TS
【发布时间】:2017-03-12 15:00:42
【问题描述】:

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

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

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']
        }
    });
}

【问题讨论】:

    标签: typescript karma-runner


    【解决方案1】:

    我找到了一个解决方案,通过创建一个 gulp 任务来监视 TS 文件并捆绑它们,而 Karma 正在运行,然后我让 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'));
        });
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-09
      • 2021-04-15
      • 2020-02-29
      • 1970-01-01
      • 2017-09-18
      • 2016-07-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多