在测试控制器时,我可以合法地实现 100% 的代码覆盖率,如下所示:
正确报告 100% 代码覆盖率的示例
控制器代码
<?php
App::uses('AppController', 'Controller');
class UsersController extends AppController {
public function example($option = null) {
if ($option == 'foo') {
$some_var = 'hello';
} elseif ($option == 'bar') {
$some_var = 'goodbye';
}
$this->set(compact('option', 'some_var'));
}
}
测试代码
<?php
App::uses('UsersController', 'Controller');
class UsersControllerTest extends ControllerTestCase {
public function testExampleFoo() {
$this->testAction('/users/example/foo');
$this->assertEquals('hello', $this->vars['some_var']);
}
public function testExampleBar() {
$this->testAction('/users/example/bar');
$this->assertEquals('goodbye', $this->vars['some_var']);
}
}
但是,我如何确定在我的视图中实现了 100% 的代码覆盖率?例如:
100% 代码覆盖率的错误报告示例
控制器代码
<?php
App::uses('AppController', 'Controller');
class UsersController extends AppController {
public function example($option = null) {
$this->set('option', $option);
}
}
查看代码
<?php
if ($option == 'foo') {
$some_var = 'hello';
} elseif ($option == 'bar') {
$some_var = 'goodbye';
}
if (isset($some_var)) {
echo $some_var;
}
测试代码
<?php
App::uses('UsersController', 'Controller');
class UsersControllerTest extends ControllerTestCase {
public function testExampleFoo() {
$result = $this->testAction('/users/example/foo', array('return' => 'view'));
$this->assertEquals('hello', $result);
}
}
请注意,上面的测试代码不会测试“/users/example/bar” URL,因此elseif
永远不会测试视图。因此,即使 100% 的控制器代码经过测试,我实际上并没有达到 100% 的代码覆盖率(因为测试的视图代码不到 100%)。我能做些什么呢?