Как правильно мокнуть коллекцию моделей laravel?

внутри аrtisan команды есть строка внутри конструктора

$this->transfers = TransferCrypto::where(["state" => 1])->with('ref_withdraw.user')->get();

как правильно её мокнуть в unit тесте без фабрик?

мой топорный вариант

    $mockQueryBuilder = Mockery::mock('Illuminate\Database\Eloquent\Builder');
    $mockQueryBuilder
        ->shouldReceive('where')
        ->with(['state' => 1])
        ->once()
        ->andReturnSelf();
    $mockQueryBuilder
        ->shouldReceive('with')
        ->with('ref_withdraw.user')
        ->once()
        ->andReturnSelf();
    $mockQueryBuilder
        ->shouldReceive('get')
        ->once()
        ->andReturn(collect([
            (object)[
                'id' => 1, 'state' => 1,
            ],
            (object)['id' => 2, 'state' => 1]
        ]));
    $mockTransferCrypto = Mockery::mock('overload:App\TransferCrypto'); // or 'alias'
    $mockTransferCrypto
        ->shouldReceive('where')
        ->with(['state' => 1])
        ->once()
        ->andReturn($mockQueryBuilder);

как правильно и красиво это зарефакторить?


Ответы (0 шт):