I'm currently working on a REST service built in Zend Framework and I ran into problems very quickly - when I tried to write the first unit test for the first action in fact! PHPUnit was just dying when I asked it to dispatch() any URL which didn't return HTML, it wasn't even giving its usual output.
What was actually happening was I was making use of Zend_Controller_Action_Helper_Json, my service returns JSON and this action helper takes input, transforms it into JSON, sets the content-type correctly and tells ZF not to look for a view since we don't need one. I thought this was pretty neat.
But look at the start of the declaration for the action helper:
class Zend_Controller_Action_Helper_Json extends Zend_Controller_Action_Helper_Abstract
{
/**
* Suppress exit when sendJson() called
* @var boolean
*/
public $suppressExit = false;
...
By default the JSON action helper will exit() - which of course when run from phpunit causes that to exit as well! There is the class variable there so it was simple to turn off - I just extended my class and changed the value of that $suppressExit variable.
class Zend_Controller_Action_Helper_ServiceJson extends Zend_Controller_Action_Helper_Json {
public $suppressExit = true;
}
My tests now run successfully and I can build my application, hopefully next time I'll realise what I'm doing wrong faster!