Mam sytuację, w której jest metoda a jeden z jej argumentów idzie przez referencję. Mój problem polega na tym, że ta referencja zwraca IDki, które później są sprawdzane w innej metodzie (tej, która wywołała) czy IDki są w tablicy, jeśli tak to zwróć true. Poniżej przedstawiam schemat (nazwy klas, metod - zmyślone na potrzeby tematu, flow jest jednak ten sam):
<?php class Db { public function update($rows, &$success, &$error) { if ((..)) { $success[] = $this->getId(); } else { $error[] = $this->getId(); } } } class Prepare { protected $db; public function setDb($db) { // itd. } public function make() { // $rows = (...) jakaś tam obróbka danych $this->db->update($rows, $success, $error); } } class TestPrepare extends PHPUnit_Framework_TestCas { public function testMakeMethod() { $mck = Mockery::mock(); $mck->shouldReceive('update') ->with( ['id' => 51, 'name' => 'John', 'password' => 'Hour'] // REFERENCE? // REFERENCE? ) ->once() ->andReturn(true) $prepare = new Prepare(); $prepare->setDb($mck); $response = $prepare->make(); $this->assertTrue($response) } }
I teraz dla #44, #45 linijki nie wiem co mam wstawić, aby metoda, którą mockuje przekazywała w sobie też referencję z testowymi danymi, próbowałem coś w stylu:
->with( ['id' => 51, 'name' => 'John', 'password' => 'Hour'] \Mockery::on(function(&$error) { return true; }), \Mockery::on(function(&$success) { $success[] = 51; return true; }), )
ale to nie działa, ponieważ jak zrobię sobie:
przed tym return w klasie: Prepare to cały czas mam pustą tablice - w ogóle nie dodało mojego "51" (jako ID) w konsekwencji mam, że test nie przeszedł. Ma ktoś jakiś pomysł?