Что я хочу сделать, так это подтвердить, что метод класса был вызван во время запроса. Код, вероятно, лучше объяснит, что я пытаюсь сделать:
Тест:
public function use_default_provider_when_getting_addresses()
{
$spy = $this->spy(CraftyClicksService::class);
$this->app->bind(CraftyClicksService::class, function () use ($spy) {
return $spy;
});
$addresses = $this->get('/api/v1/address?postcode=POSTCODE')->decodeResponseJson();
$this->assertTrue(in_array([
'line_1' => 'Line 1',
'line_2' => 'Line 2',
'postcode' => 'POSTCODE',
], $addresses));
$spy->shouldHaveReceived('getAddresses')->once();
}
Запрос попадает в простой контроллер:
public function show(Request $request, AddressService $addressService)
{
return $addressService->findAddress($request->input('postcode'));
}
Адресная служба class (пока) затем вызывает функцию другого класса для получения адресов.
class AddressService
{
protected CraftyClicksService $craftyClicksService;
/**
* AddressService constructor.
*/
public function __construct()
{
$this->craftyClicksService = new CraftyClicksService();
}
/**
* @param string $postcode
* @return array
*/
public function findAddress(string $postcode)
{
return $this->craftyClicksService->getAddresses($postcode);
}
Я могу «шпионить» за классом AddressService и утверждать, что он получил метод findAddress
, однако, похоже, я не могу утверждать getAddresses
функция для класса CraftyClicksService
.
Я всегда получаю ошибку Method getAddresses(<Any Arguments>) from Mockery_3_App_Services_CraftyClicksService should be called at least 1 times but called 0 times.
, даже если тест ответа проходит, и я могу подтвердить, что метод действительно вызван.
Пытался использовать $this->app->bind
, а также $this->spy()
, но тест по-прежнему не проходит.