Laravel Как протестировать Stati c методы построителя запросов? - PullRequest
0 голосов
/ 20 июня 2020

У меня есть следующий класс репозитория с единственной ответственностью

<?php
namespace App\Launches\Repositories\Customer;

use App\Launches\Models\Customer\Subscription;
use Illuminate\Support\Collection;

final class GetSubscriptionRepository
{
    /**
     * @param int $productId
     * @return Collection
     */
    public function byProductId(int $productId): Collection
    {
        return Subscription::where('product_id', $productId)->get();
    }
}

Я хочу иметь возможность протестировать этот метод, чтобы убедиться, что полученный объект - это тот, который я просил. Итак, я сделал следующее:

<?php
namespace Tests\Unit\Launches\Repository\Customer;

use App\Launches\Models\Customer\Subscription;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Collection;
use Tests\TestCase;
use App\Launches\Repositories\Customer\GetSubscriptionRepository;

class GetSubscriptionRepositoryTest extends TestCase
{
    use RefreshDatabase;

    /**
     * @var GetSubscriptionRepository
     */
    protected $getSubscriptionRepository;

    /**
     * @var Collection
     */
    protected $subscriptionCollection;

    public function setUp(): void
    {
        parent::setUp();

        $this->getSubscriptionRepository = new GetSubscriptionRepository();
        $this->subscriptionCollection = factory(Subscription::class, 20)->make();
    }

    /**
     * @covers GetSubscriptionRepository::byProductId
     */
    public function testSubscriptionIsPickedById()
    {
        $randomSubscription = $this->subscriptionCollection->random(1)->first()->toArray();
        $pickedSubscription = $this->getSubscriptionRepository->byProductId($randomSubscription['id']);
        
        $this->assertEquals($randomSubscription['id'], $pickedSubscription->get('id'));
    }
}

Он всегда возвращает null на $this->getSubscriptionRepository->byProductId($randomSubscription['id']);

Очевидно, что в базе данных должен быть какой-то материал, есть ли способ проверить его без добавление материала в базу данных?

...