testing - How Can I Check View Code Coverage with CakePHP Tests? -


when testing controllers, can legitimately achieve 100% code coverage, shown here:

example of correct report of 100% code coverage

controller code

<?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'));     } } 

test code

<?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']);     } } 

however, how can sure i've achieved 100% code coverage in views? example:

example of incorrect report of 100% code coverage

controller code

<?php app::uses('appcontroller', 'controller');  class userscontroller extends appcontroller {      public function example($option = null) {         $this->set('option', $option);     } } 

view code

<?php  if ($option == 'foo') {     $some_var = 'hello'; } elseif ($option == 'bar') {     $some_var = 'goodbye'; }  if (isset($some_var)) {     echo $some_var; } 

test code

<?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);     } } 

notice above test code doesn't test "/users/example/bar" url, , view's elseif never tested. though 100% of controller's code tested, haven't achieved 100% code coverage (since less 100% of view's code tested). can this?

to answer question in title, cakephp can use xdebug pull out test's code coverage. if remember correctly, embeds code coverage render test suite.

as general comment on example you've given above, imho go extent of testing controller when no option passed ensure responds in manner expected, if throws exception.

update

my apologies not reading @nick's question properly.

to knowledge, cakephp doesn't pull code coverage of .ctp files. not mean xdebug doesn't generate , can use ide (i use phpstorm has tool) or xdebug pull code coverage directly. granted, doesn't make testing smooth using test suite within cakephp alone.

alternatively, can test against rendered view. according documentation possible specify return type when testing actions. therefore 1 possible solution compare either view or contents against pre-rendered file. there danger because invisible characters ('\n', '\r', '\t') may cause assert fail though logically, target , result markup identical.

one example in documentation shows how can assert values using regex allowing inspect specific areas of document validity. use php's dom classes traverse document instead.

good luck!

update 21:21 09/05/2013

cakephp's test suite build upon php unit in turn, uses xdebug generate code coverage. had around source , inspected basecoveragereport class , discovered coverage generated framework files used running test, including unit under test (e.g. controller). suggests me code coverage not selectively turned on , generated files including view template. said, failed find template 1 of files had generated code coverage for. however, did note code coverage wasn't generated view class means nothing being rendered. @ point getting little confused since imagine have rendered in order access view or contents properties of controller test case. on closer inspection, turns out these values empty seems may wrong setup.

what suggest hold of open source ide supports debugging php development tools eclipse , stick break-point in code , follow thread through framework. give greater insight how views rendered when testing controllers , if so, track down code coverage. have thought code coverage templates quite useful , i'm surprised functionality doesn't exist. if choose modify framework's source, might worth cloning cakephp in github , add pull request can merge in changes main branch.

i'm sorry couldn't of more help, took best shot @ it!


Comments

Popular posts from this blog

linux - xterm copying to CLIPBOARD using copy-selection causes automatic updating of CLIPBOARD upon mouse selection -

c++ - qgraphicsview horizontal scrolling always has a vertical delta -