mardi 8 décembre 2015

Mockery closure as parameter

There is a 'Client service' that I want to mock. An 'Event listener' is registered to this client via closure. When it matches an event I saved 'event' details to a referenced array variable.

I try to mock it but cannot find the proper way, controller function returns empty array.

Controller function:

$response = array();

$this->client->registerEventListener(
    function (EventMessage $event) use (&$response) {
        $response = array(
            'name'          =>  $event->getName(),
            'device'        =>  $event->getDevice(),
            'message'       =>  $event->getMessage()
        );
    }
);

...

return $response;

Test file:

$eventMessage = m::mock('EventMessage');
$eventMessage->shouldReceive('getName')->atLeast()->times(1)->withNoArgs()->andReturn("Name");
$eventMessage->shouldReceive('getDevice')->atLeast()->times(1)->withNoArgs()->andReturn("Device");
$eventMessage->shouldReceive('getMessage')->atLeast()->times(1)->withNoArgs()->andReturn("Message");

$client = m::mock('Client');
$client->shouldReceive('registerEventListener')
       ->atLeast()->times(1)
       ->with(
           m::on(function($event) use ($eventMessage){
           $event = $eventMessage;
           return true;
         })
       ->andReturn();

Aucun commentaire:

Enregistrer un commentaire