Кто-нибудь знает, как я могу издеваться над свойствами макетов?
Мой репозиторий ниже требует экземпляр ApiClient
и вызывает метод для его свойства:
<?php
class PaymentRepository
{
public function __construct(ApiClient $apiClient)
{
$this->apiClient = $apiClient;
}
public function create()
{
return $this->apiClient->payments->create('args');
}
}
Я могу смоделировать экземпляр ApiClient
и вставить его в PaymentRepository
, но как я могу установить ожидания для методов, вызываемых для его свойства payments
?
Установка нового макета для свойства макета не работает:
<?php
class PaymentRepositoryTest
{
public function test_it_can_create_payments()
{
$apiClient = Mockery::mock(ApiClient::class);
$paymentsEndpoint = M::mock(PaymentsEndpoint::class);
$paymentsEndpoint->shouldReceive('create')
->with('args')
->once()
->andReturn(true);
$apiClient->payments = $paymentsEndpoint;
$payments = new PaymentRepository($apiClient);
$this->assertTrue($payments->create());
}
}
Но тогда я получаю ошибку:
Error : Call to a member function create() on null
Я также пытался смоделировать, как можно смоделировать цепочку методов, но Mockery поддерживает только методы цепочки.
<?php
class PaymentRepositoryTest
{
public function test_it_can_create_payments()
{
$apiClient = Mockery::mock(ApiClient::class);
$apiClient->shouldReceive('payments->create')
->with('args')
->once()
->andReturn(true);
$payments = new PaymentRepository($apiClient);
$this->assertTrue($payments->create());
}
}
Как я могу решить это? Как я могу установить ожидания для недвижимости на макете?