【发布时间】:2015-03-02 13:08:06
【问题描述】:
我正在尝试提出一个可行的 TypeScript 构建步骤,其中包括以下内容:
- 编译 TypeScript(显然)
- 理想情况下允许编译器遍历依赖树
- 通过 karma 执行 jasmine 单元测试
- 不依赖 IDE (Visual Studio/WebStorm) 来执行测试和输出 JS
- 能够通过 WebStorm 的运行配置执行单元测试
- 代码覆盖率结果基于 TS 代码,而不是生成的 JS
我目前的尝试涉及使用:
- gulp-tsc
- 业力
- 业力打字稿预处理器
我宁愿只运行一次编译步骤,因为到目前为止我必须执行单元测试的预编译步骤和下面的build-ts 步骤以输出到我的 dist 文件夹。我曾尝试使用 karma-typescript-pre-processor,但结果好坏参半且性能不佳(经过测试,16 秒,没有 2 秒)。
注意:我还没有尝试解决代码覆盖率方面的问题,因为我对现有的构建/单元测试解决方案不满意。
我目前使用的业力文件是
module.exports = function(config) {
config.set({
browsers: ['PhantomJS'],
frameworks: ['jasmine'],
files: [
'../bower_components/angular/angular.js',
'../bower_components/angular-mocks/angular-mocks.js',
'../app/**/*_test.ts',
{
pattern: '../app/**/!(*_test).ts',
included: false
}
],
preprocessors: {
'../typings/jasmine/jasmine.d.ts': ['typescript'],
'../app/**/*.ts': ['typescript']
},
typescriptPreprocessor: {
options: {
sourceMap: true,
target: 'ES5',
noResolve: false
},
transformPath: function(path) {
return path.replace(/\.ts$/, '.js');
}
},
//reporters: ['progress', 'growl'],
colors: true
});
};
gulpfile:
gulp.task('build-ts', function () {
return gulp.src(paths.ts)
.pipe(tsc({
noResolve: false,
out: 'app.js',
outDir: paths.dist.js,
removeComments: true,
//sourcePath: '../../app/ts',
//sourcemap: true,
target: 'ES5'
}))
.pipe(gulp.dest(paths.dist.js))
.pipe(connect.reload());
});
【问题讨论】:
-
听起来测试套件是你的慢点,而不是转译。您应该查看您的测试,看看哪些测试花费的时间最长。也许你可以让他们更有效率或更快?如果您有面向时间的测试,也许您可以引入调度程序并进行一些确定性测试?
-
您有示例项目可以查看吗?
-
@SteveSloka 你可以看一下这个repo,测试在app_tests.ts,karma配置文件在config目录下(github.com/Brocco/ts-star-wars)
-
为什么要处理
../typings/jasmine/jasmine.d.ts?这只是一个类型定义。另一种选择.. 加载 tsconfig.json 文件以填充 typescriptPreprocessor.options -
@Ridermansb 这个问题来自大约 9 个月前(在 tsconfig.json 之前)。
标签: typescript gulp karma-runner