Как я могу смоделировать свойства на другом макете? - PullRequest
0 голосов
/ 09 сентября 2018

Кто-нибудь знает, как я могу издеваться над свойствами макетов?

Мой репозиторий ниже требует экземпляр 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());
    }
}

Как я могу решить это? Как я могу установить ожидания для недвижимости на макете?

...