我想弄清楚如何限制我的测试,以便覆盖记者只考虑测试时覆盖的函数为该功能编写,具体为。如何使用Karma,Jasmine和Istanbul来指定测试应涵盖哪些函数/方法
从PHPUnit doc下面的例子显示相当不错的我尽量做到:
注解@covers可以在测试代码被用于指定 方法(S)的测试方法要测试:
/**
* @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测试框架?
想到的是使用依赖注入和模拟来减少实际生产代码的调用次数。 – henrikmerlander
我同意henrikmerlander。此外,如果您正在使用真正的函数调用而不是间接在测试方法内部进行模拟,那么您也正在测试该函数 – ejosafat