我正在尝试将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']
}
});
}
答案 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'));
});
});