PHP: ложная переменная $ user = Auth :: user () - PullRequest
0 голосов
/ 16 ноября 2018

Итак, я пытаюсь смоделировать служебный метод.

В моем служебном файле:

/**
 * Return all Api Keys for current user.
 *
 * @return Collection
 */
public function getApiKeys(): Collection
{
    $user = Auth::user();

    return ApiKey::where('org_id', $user->organizationId)->get();
}

Как мне смутить это?

<?php


namespace App\Services;

use PHPUnit\Framework\TestCase;
use Mockery as m;

class ApiKeysServiceTest extends TestCase
{
public function setUp()
{
    parent::setUp();

    /* Mock Dependencies */
}

public function tearDown()
{
    m::close();
}

public function testGetApiKeys()
{
    /* How to test? $user = Auth::user() */
    $apiKeysService->getApiKeys();
}

}

В моем классе TestCase у меня есть:

public function loginWithFakeUser()
{
    $user = new GenericUser([
        'id' => 1,
        'organizationId' => '1234'
    ]);

    $this->be($user);
}

Я хочу протестировать этот метод.Может быть, это включает в себя реструктуризацию моего кода, чтобы $ user = Auth :: user () не вызывался в методе.Если дело обстоит так, есть какие-нибудь мысли относительно того, куда это должно пойти?

Спасибо за Ваш отзыв.

1 Ответ

0 голосов
/ 27 ноября 2018

В вашем testGetApiKeys методе вы не настраиваете мир.Создайте фиктивного пользователя (используя фабрику, как предложено в комментариях factory('App\User')->create()), затем снова установите apiKey, используя фабрику, затем вызовите метод и подтвердите, что это то, что вы настроили.Пример с вашим кодом

public function loginWithFakeUser()
{
    $user = factory('App\User')->create();

    $this->be($user);
}

public function testApiSomething()
{
    $this->loginWithFakeUser();

    // do something to invoke the api...
    // assert results
}

Хорошая схема для тестовой структуры:

  • Если у нас есть что-то (настроить все необходимые компоненты)
  • Еслипользователь выполняет какое-либо действие (посещает страницу или что-то еще)
  • Затем убедитесь, что результатом действия является то, что вы ожидаете (например, статус 200)
...