您可以使用挂钩获取有关方案的信息,包括其标签,但只能在@beforeFeature
或@beforeSuite
中执行此操作。
不幸的是,这意味着它不会报告标签被过滤掉的情况。
这是我最初的解决方案。
class Context extends BehatContext {
protected static $scenarioCount = 0;
protected static $scenarioCountWip = 0;
/**
* Count scenarios and WIP
* @BeforeScenario
*/
public function countScenario(Behat\Behat\Event\ScenarioEvent $scenario)
{
self::$scenarioCount++;
if(in_array('wip', $scenario->getScenario()->getTags())) {
self::$scenarioCountWip++;
}
}
/**
* @AfterSuite
*/
public static function coverageReport()
{
echo 'Scenarios: '.self::$scenarioCount.PHP_EOL;
echo ' - in progress: '.self::$scenarioCountWip.PHP_EOL;
echo ' - coverage: '.(100/self::$scenarioCount)*(self::$scenarioCount-self::$scenarioCountWip).PHP_EOL;
echo PHP_EOL;
}
}
特征文件:
Feature: Test Count
@wip
Scenario: Work in progress
@someTag
Scenario: Scenarion with tag
Scenario: Final scenario
结果运行的所有测试时:
Feature: Test Count
@wip
Scenario: Work in progress
@someTag
Scenario: Scenarion with tag
Scenario: Final scenario
Scenarios: 3
- in progress: 1
- coverage: 66.666666666667
3 scenarios (3 passed)
No steps
这个结果丝毫@wip过滤掉:
Feature: Test Count
@someTag
Scenario: Scenarion with tag
Scenario: Final scenario
Scenarios: 2
- in progress: 0
- coverage: 100
2 scenarios (2 passed)
No steps
我我希望这个问题能够公开有人找到更好的解决方案。
http://tech.vg.no/2014/01/21/generating-code-coverage-of-behat-tests/但它看起来有点hacky – 2014-10-22 16:45:26
这是为了覆盖已知的行为,而不是覆盖代码。但是,如果我没有时间写出单元测试,那么以这种方式进行覆盖是很好的了解。 :) – DanielM 2014-10-23 08:23:07