【问题标题】:TypeScript Compile Suggestions (TS + gulp + karma)TypeScript 编译建议(TS + gulp + karma)
【发布时间】: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


【解决方案1】:

您可以使用 gulp.watch 在保存时编译 typescript 文件。这样,当您运行测试时,打字稿已经被编译。 gulp-tsc 模块应该有设置增量编译的指南。

【讨论】:

  • 虽然这并不能完全处理我的场景,但它确实符合我的意图。构建 JS 的 gulp 任务(使用源映射进行代码覆盖) 我发现在对输出的 JS 代码执行单元测试之前,我可以使用 WebStorms 运行配置来预运行编译。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-18
  • 1970-01-01
  • 2016-06-17
  • 1970-01-01
  • 1970-01-01
  • 2018-03-25
  • 1970-01-01
相关资源
最近更新 更多