试图让赛普拉斯,TypeScript和IstanbulJS协同工作

问题描述 投票:11回答:2

我正在尝试使用IstanbulJSTypeScript编写的代码生成代码覆盖率报告,并使用Cypress进行测试。但事情报告不合适:

我专门为这个问题创建了一个git repository MCVE,所以你可以重现我的情况:

git clone https://github.com/papb/cy-ts-istanbul-question
cd cy-ts-istanbul-question
npm install
npm test
# And then open the file `coverage/index.ts.html` to see the image above.

如何解决?


细节

我有一些用TypeScript编写的代码,我使用rolluprollup-plugin-typescript2rollup-plugin-istanbul将其转换并捆绑到一个JavaScript(ES6)文件中。这非常有效,我在TypeScript中的源代码变成了一个准备好与<script>标签一起包含在浏览器中并使用的文件。

其次,我使用cypress在HTML页面上运行测试,其中包括上面提到的已编译的JS代码。这也很有效,cypress能够测试我最初用TypeScript编写的函数。

现在,我想为这些测试设置覆盖率报告。在赛普拉斯常见问题解答中,我们可以找到Is there code coverage?的问题,答案当前没有(关于内置功能),但in discussion是未来可以接受的事情,in fact it can be done

问题是:上面做过的人没有使用TypeScript。我是。所以我还有一些额外的步骤要做,这就是我目前陷入困境的地方。直觉上,我认为这只是配置IstanbulJS以正确遵循源映射的问题,但我找不到任何关于如何执行此操作的文档。 Every guide about TypeScript + IstanbulJS that I can find假设我正在使用Mocha,但我不是 - 我正在使用赛普拉斯来自TypeScript的转换源。

注意:我知道一般来说通常的“代码覆盖”方法对cypress测试没有多大意义,但在我的确切情况下我认为确实如此,我已经考虑过了,请不要制作这个框架挑战这个问题。


编辑:要清楚,在这里使用汇总并不是一个硬性要求。如果你有一个使用其他东西的解决方案,它也是完全可以接受的。重要的是,正如标题所说,赛普拉斯+ TypeScript + IstanbulJS。

javascript typescript cypress istanbul rollupjs
2个回答
5
投票

我用过webpack + babel-loader + @babel/preset-typescript + babel-plugin-istanbul

基本上策略是:

  • 检测您的应用代码,以便在window.__coverage__上生成覆盖率
  • 在cypress规范运行后,使用cy.writeFile将报告保存到.nyc_output
  • 并使用cy.exec('nyc report --reporter=html')生成报告

然后,您应该能够在coverage/目录中查看html覆盖率报告

以下是我对您的项目所做的更改,切换到具有完全可用代码覆盖率的webpack

https://github.com/Bkucera/cypress-code-coverage/commit/40f88aa27778dc55ad3fae56af66724f73b6496d enter image description here

我把其他工作实例here放在一起。它有一些示例,在新推出的create-react-app(使用webpack)和vanilla typescript + webpack项目之上设置代码覆盖率:

create-react-app-ejected:

在新弹出的create-react-app上设置代码覆盖率的柏树使用:

  • @babel/preset-typescript
  • @cypress/webpack-preprocessor
  • babel-loader
  • babel-plugin-istanbul

vanilla-typescript-webpack:

vanilla typescript和webpack项目的代码覆盖率使用:

  • @babel/preset-typescript
  • @cypress/webpack-preprocessor
  • babel-loader
  • babel-plugin-istanbul

enter image description here

在这两个中我还会检测柏树代码,以便您可以合并覆盖率报告,但我目前不这样做


0
投票

我花了一些时间试图解决这个问题。汇总生成兼容代码的方式似乎是一个问题。通过更改tsconfig目标,我能够将分支高达75%

{
  "compilerOptions": {
    "target": "es5",
    "module": "es2015",
    "declaration": true,
    "declarationMap": true,
    "sourceMap": true,
    "outDir": "./dist",
    "strict": true,
    "esModuleInterop": true
  }
}

它涵盖了所有代码,但必须有一个由汇总生成的分支,它已被传递。但我真的认为赛普拉斯不打算用于这样的功能测试

© www.soinside.com 2019 - 2024. All rights reserved.