- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试弄清楚如何限制我的测试,以便覆盖率报告者只考虑在为该功能专门编写测试时覆盖的功能。
下面的例子来自PHPUnit doc很好地展示了我试图实现的目标:
The @covers annotation can be used in the test code to specify which method(s) a test method wants to test:
/**
* @covers BankAccount::getBalance
*/
public function testBalanceIsInitiallyZero()
{
$this->assertEquals(0, $this->ba->getBalance());
}
如果执行上面的测试,只有函数 getBalance
会被标记为被覆盖,没有其他。
现在是我的 JavaScript 测试中的一些实际代码示例。此测试显示了我试图摆脱的不需要的行为:
it('Test get date range', function()
{
expect(dateService.getDateRange('2001-01-01', '2001-01-07')).toEqual(7);
});
此测试会将函数 getDateRange
标记为已覆盖,但也会标记从内部调用的任何其他函数 getDateRange
。由于这个怪癖,我项目的实际代码覆盖率可能比报告的代码覆盖率低很多。
我怎样才能阻止这种行为?有没有办法让 Karma/Jasmine/Istanbul 以我想要的方式运行,或者我是否需要切换到另一个框架来进行 JavaScript 测试?
最佳答案
我看不出您的要求有任何特殊原因。我会说如果您的测试导致调用嵌套函数,那么该函数也会被覆盖。您确实是在间接测试那段代码,那么为什么不应该将其包含在代码覆盖率指标中呢?如果内部函数包含错误,您的测试可以捕获它,即使它没有直接测试它也是如此。
您可以使用特殊注释来注释您的代码,以告诉 Istanbul 尔忽略某些路径: https://github.com/gotwarlost/istanbul/blob/master/ignoring-code-for-coverage.md但我认为这恰恰相反,如果您知道不想覆盖特定的执行路径,则不要减少覆盖率,这可能是因为为它编写测试用例太难了。
此外,如果您关心单独测试的“低级”功能,请确保您的代码以模块化方式构建,以便您可以先自行测试这些功能。您还可以设置不同的测试运行配置,这样您就可以拥有一个仅测试基本逻辑并报告其覆盖率的套件。
正如评论中所建议的,模拟和依赖注入(inject)可以帮助您的测试更加集中,但您基本上总是希望进行一些高级测试,在这些测试中您可以一起检查这些部分的集成。如果您模拟所有内容,那么您永远不会测试协同工作的实际部分。
关于javascript - 如何使用 Karma、Jasmine 和 Istanbul 指定测试应涵盖哪些功能/方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36012202/
nyc 中使用的仪器是什么? nyc's instrument command can be used to instrument source files outside of the contex
我正在尝试将我的 istanbul 代码覆盖率命令转换为 nyc。 看起来nyc现在是 Istanbul 尔测试覆盖率库的命令行界面。 在 Istanbul 尔,我们会得到这样的报道: istanbu
请问有人知道我如何解决这个问题吗?我的 test:coverage 定义如下。 scripts{ "test:coverage": "babel-node ./node_modules/.bin/i
我正在使用 coverageIstanbulReporter 为我的 javascript 项目生成代码覆盖率报告。默认输出 xml 文件名为“cobertura-coverage.xml”。我想将此
我的代码有多个 if声明但没有相应的 else声明。我一直在加/* istanbul ignore else */单独用于所有这些 if语句以忽略相应的缺失 else块。有没有办法忽略所有丢失的 el
NYC/Istanbul 代码报告工具是否会忽略 VueJS 组件文件(扩展名为 .vue)中的模板和样式标签。 nyc 够聪明吗? 最佳答案 是的,这是可能的@light24bulbs!我已经让 n
在 istanbul JS 代码覆盖率工具生成的 HTML 报告中,带有黑色背景的“I”和“E”符号表示什么? 最佳答案 这些符号位于 if-else 语句的前面。 正如您在附加的图像中看到的那样,'
有人可以帮忙解决以下问题吗? 我的操作系统是最新的 windows 10,时区是 (UTC+0300) Istanbul(夏令时已被移除,时区设置为 +0300 在土耳其的最新规定之后 - 2016
想把漂亮的 Linux 桌面录制下来与他人分享?要给朋友演示 Linux 的使用技巧?遇到的 Linux 问题实在难以描述?Istanbul能满足你的要求。使用 Istanbul,你可以将 Linu
我有一个用 Mocha 编写的测试的 React 项目。 Istanbul 尔用于获取测试覆盖率。 我在名为 lib 的文件夹中有 4 个 react 组件并在 test文件夹,我只为 2 个组件编写
我目前正在用 mocha 和 nyc 测试我的覆盖范围,我注意到我的一些断言调用没有被调用。如何在 nyc 中包含我的测试文件以确保涵盖所有断言? 我尝试过: "nyc": { "include"
刚刚开始使用一般的代码覆盖工具,但我认为我已经正确设置了所有内容。但是, Istanbul 尔正在生成我的规范文件而不是源文件的覆盖率报告? 当我运行jasmine-node RepeatSpec.j
我正在测试一个简单的应用程序(来自此处的 Mocha 教程代码 https://marcofranssen.nl/using-mocha-chai-sinon-to-test-node-js/ )以尝
我正在使用 istanbul 和 nyc 命令运行 NodeJs 的代码覆盖率报告。 我正在使用 mocha 进行单元测试 正如预期的那样,我得到了每个文件的报告,但我希望看到的是具有单个目录摘要的报
我收到一份空报告,它列出了文件,但没有填写百分比...... 知道是什么原因造成的吗? 错误信息: Handlebars:访问已被拒绝解析属性“声明”,因为它不是其父级的“自己的属性(property
我目前正在最终覆盖范围内获取我的测试文件。那可能是因为它们与我的组件并排放置而不是拥有自己的 测试 文件夹。 如何将这些排除在保险范围之外? 我已安装 Istanbul 尔 和 纽约 我正在使用 Mo
我正在开发 lite javascript 框架,尽管我确定在制定规范时几乎所有函数都被调用,但我的覆盖率语句无法达到 10%。 如果有人知道我做错了什么,我会很高兴听到。 我的项目构建: https
在初始状态下,我有例如app.module.js 包含以下 Angular 应用程序代码: 'use strict'; var app = angular.module('bumblebee', []
我正在运行 Istanbul 尔并获得报告,我已经在循环中创建了一个后命令来运行它,并且没有收到任何错误,如何配置输出目录或后任务以将输出复制到其中的文件夹哪个Circle可以自动拾取? 谢谢!吉列尔
我有一种情况,我的所有测试都并行运行,并创建了覆盖率报告。 我能够使用命令行中的 --dir 选项为每个测试创建一个单独的覆盖文件夹,这很棒。 现在我有了所有这些包含覆盖详细信息的文件夹,是否可以将所
我是一名优秀的程序员,十分优秀!