2013-11-20 3 views
1

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

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(); 

     ... 

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

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

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

+1

Вы издеваетесь над часовым, и он возвращает насмешливого пользователя. '$ sentryMock-> shouldReceive ('getUserProvider') -> times (1) -> andReturn ($ userProviderMock);' – Mike

ответ

2

Вы можете заглушить метод 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); 
+0

Спасибо, ребята. Это очень помогло мне, поскольку я новичок в насмешливости. – okarahan

Смежные вопросы