【发布时间】:2019-07-23 01:27:55
【问题描述】:
我正在尝试使用IstanbulJS 为我用TypeScript 编写并使用Cypress 测试的代码生成代码覆盖率报告。但事情的报道不合时宜:
我专门为这个问题创建了一个git repositoryMCVE,所以你可以准确地重现我的情况:
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 编写的代码,我用 rollup、rollup-plugin-typescript2 和 rollup-plugin-istanbul 转译并捆绑到单个 JavaScript (ES6) 文件中。这很完美,我在 TypeScript 中的源代码变成了一个文件,可以与 <script> 标记一起包含到浏览器中并使用。
其次,我使用cypress 在包含上述转译的 JS 代码的 HTML 页面上运行测试。这也很完美,cypress 能够测试我最初用 TypeScript 编写的函数。
现在,我想为这些测试设置覆盖率报告。在 Cypress 常见问题解答中,我们可以找到问题 Is there code coverage?,目前的答案是 no(关于内置功能),但 in discussion 是值得欢迎的将来完成,in fact it can be done。
问题是:上面那个人没有使用 TypeScript。我是。所以我有一点额外的步骤要做,这就是我目前卡住的地方。直观地说,我认为这只是配置 IstanbulJS 以正确遵循源映射的问题,但我找不到任何有关如何执行此操作的文档。 Every guide about TypeScript + IstanbulJS that I can find 假设我正在使用 Mocha,但我不是 - 我正在使用 Cypress 和来自 TypeScript 的转译源。
注意:我知道一般来说,cypress 测试的通常“代码覆盖率”方法没有多大意义,但在我的确切情况下,我认为确实如此,我已经考虑过了,拜托不要对这个问题提出这个框架挑战。
编辑:需要明确的是,在这里使用汇总并不是硬性要求。如果你有一个使用其他东西的解决方案,它也是完全可以接受的。重要的是,正如标题所说,Cypress + TypeScript + IstanbulJS。
【问题讨论】:
-
你真的需要使用
Cypress吗?对于类似的事情,我使用Intern.js 将 ES6 转换为 ES5,Rollup和代码覆盖率就像一个魅力 -
@Troopers 你好,谢谢你的提示,我稍后会看看。我希望 cypress 进行界面测试、点击按钮、快照测试等。这正是 cypress 所擅长的。 Intern.js 也能做到这些吗?
-
Functionnal testing 受支持。对于快照我不确定
-
@Troopers 谢谢。我会考虑使用它,但现在我仍在 Cypress 中寻找解决方案。另外,您说您使用了转译 ES6 -> ES5,但是 TypeScript 呢?行得通吗?
-
Intern.js 是用 TypeScript 编写的,并通过 Intern 进行了测试。所以我认为这行得通
标签: javascript typescript cypress istanbul rollupjs