在 Typescript 项目上运行业力覆盖时出现意外令牌

Posted

技术标签:

【中文标题】在 Typescript 项目上运行业力覆盖时出现意外令牌【英文标题】:Unexpected token while running karma-coverage on Typescript project 【发布时间】:2017-12-11 07:53:29 【问题描述】:

我有一个基本的 Angular/Typescript 项目,其中包含 12 个运行良好的基本单元测试。现在我想获得这些测试的覆盖率。我尝试了各种方法,但都没有奏效,所以我决定从业力覆盖重新开始,并在这里寻求帮助。 :-)

目前,当我运行 karma 时,每个源文件都会收到一条错误消息,如下所示:

Failed to parse file: C:/Users/FRBA/Documents/MyProject/src/app/nav/new-panel/new-panel.component.ts
07 07 2017 07:54:35.832:ERROR [preprocessor.coverage]: Line 1: Unexpected token
  at C:/Users/FRBA/Documents/MyProject/src/app/nav/new-panel/new-panel.component.ts

我的 karma.conf.js 看起来像这样:

var path = require('path');
module.exports = function (config) 
  config.set(
    files: [
      'src/app/**/*.ts',
      'test/app/**/*.ts'
    ],
    basePath: '',
    frameworks: ['jasmine', '@angular/cli'],
    plugins: [
      require('karma-jasmine'),
      require('karma-chrome-launcher'),
      require('karma-ie-launcher'),
      require('karma-jasmine-html-reporter'),
      require('karma-coverage'),
      require('@angular/cli/plugins/karma')
    ],
    client: 
      clearContext: false
    ,
    angularCli: 
      environment: 'dev'
    ,
    reporters: ['progress', 'kjhtml', 'coverage'],
    preprocessors: 
      'src/app/**/*.ts': ['coverage']
    ,
    coverageReporter: 
      type : 'html',
      dir : 'coverage/'
    ,
    port: 9876,
    colors: true,
    logLevel: config.LOG_INFO,
    autoWatch: true,
    browsers: ['Chrome', 'IE'],
    singleRun: false
  );
;

就像我说的,我已经尝试了各种方法 - 业力覆盖、业力覆盖-伊斯坦布尔报告器、业力打字稿等,但我总是遇到各种问题(业力生成空报告、业力停止在“10% 构建模块”行之后执行,依此类推),所以似乎我在做一些根本错误的事情。向业力(和打字稿)新手解释这一点的任何其他指针或教程将不胜感激。非常感谢!

【问题讨论】:

这有什么更新吗? 注释预处理器行是否删除或修改错误? 正如@JohnVandivier 提到的,使用你得到的这个预处理器设置没有意义。预处理器的目的是在测试中运行文件之前修改文件。例如,更改导入或添加一些polyfill。只需注释掉预处理器设置。测试文件本身不是预处理器。 【参考方案1】:

如configuration 下的karma-typescript 文档中所述,您需要添加karma-typescript 作为预处理器。如果您正在测试 TypeScript 文件(我假设您是从 .ts 扩展名判断的),您需要将它们转换为 javascript 以便下游处理器能够解析它们。意外的令牌错误可能引用了仅在 TypeScript 中有效的令牌。

【讨论】:

以上是关于在 Typescript 项目上运行业力覆盖时出现意外令牌的主要内容,如果未能解决你的问题,请参考以下文章

业力覆盖未能显示正确的结果

无法在 Windows 上安装业力

Angular 2 业力设置问题——业力启动但不运行测试

使用 TypeScript 3 项目参考时出现“找不到模块”错误

业力覆盖总是空的

singleRun = true 时未创建业力覆盖文件