Тестирование Laravel Controller с помощью Mockery

Я пытаюсь проверить свои действия контроллера в laravel с насмешкой. Я уже читал этот учебник здесь:

http://culttt.com/2013/07/15/how-to-structure-testable-controllers-in-laravel-4/

Я использую DI в своем конструкторе следующим образом:

public function __construct(User $user, Cartalyst\Sentry\Sentry $sentry)
{
    $this->user = $user;
    $this->sentry = $sentry;

    ...

}

Моя проблема заключается в следующем коде в моем контроллере:

public function getShow($id)
{
    try
    {
        // this is a problem, because I dont know how to tell mockery, to mock the
        // Userprovider
        $user = $this->sentry->getUserProvider()->findById($id);
        // this is not a problem for me
        $this->user->all();

        ...

Я пытаюсь работать с Mockery как с макетом. Мой вопрос заключается в том, как издеваться над таким вызовом, как $this->sentry->getUserProvider() (Cartalyst Sentry — это расширенный пакет авторизации). Чтобы издеваться над пользовательской моделью, я пишу:

$this->user = Mockery::mock('Eloquent', 'User');

Любая идея, как издеваться над Userprovider или я должен справиться с этим по-другому? Я хочу проверить свой UserController, получаю ли я данные пользователя в зависимости от идентификатора.


person okarahan    schedule 20.11.2013    source источник
comment
Вы издеваетесь над часовым, и он возвращает издевательский userProvider. $sentryMock->shouldReceive('getUserProvider')->times(1)->andReturn($userProviderMock);   -  person Mike    schedule 20.11.2013


Ответы (1)


Вы можете заглушить метод getUserProvider, чтобы вернуть другую заглушку, например.

$sentry = m::mock("F\Q\C\N\Sentry");
$userProvider = m::mock("F\Q\C\N\UserProvider");
$sentry->shouldReceive("getUserProvider")->andReturn($userProvider)->byDefault();

$userProvider->shouldReceive("findById")->andReturn(new User);
person Dave Marshall    schedule 20.11.2013
comment
Спасибо вам, ребята. Это мне очень помогло, так как я новичок в насмешках. - person okarahan; 20.11.2013