2014-01-29 1 views
1

Привет, Я пытаюсь написать тесты PHPUnit для проверки моего контроллера входа, и мой код работает нормально в браузере, но когда я запускаю блок PHP тест я получаю следующую ошибкуLaravel 4.1 PHPUnit Test: вызов функции-члена с() для не-объекта

Ошибка:

Call to a member function with() on a non-object 

Метод:

public function store() 
{ 
    $input = Input::only('email', 'password'); 
    $attempt = Auth::attempt($input); 

    if($attempt){ 
     return Redirect::intended('/') 
      ->with('flash_message', Lang::get('sessions.you_have_logged_in')); 
    } 
} 

Unit Test:

public function testStore() 
{ 
    Auth::shouldReceive('attempt') 
      ->once() 
      ->andReturn(true); 

    Redirect::shouldReceive('intended') 
      ->once(); 

    $this->call('POST', 'session'); 
} 

Я немного нуб, когда речь заходит об использовании посмешище, так что я думаю, что проблема может лежать с тем, как я насмешливо Переадресовывание Object?

ответ

0

Вы должны вернуть что-то из Redirect :: shouldReceive (...)

public function testStore() 
{ 
    Auth::shouldReceive('attempt') 
     ->once() 
     ->andReturn(true); 

    Redirect::shouldReceive('intended') 
     ->once() 
     ->andReturn($redirectResponse = Mockery::mock('Illuminate\Http\RedirectResponse')); 

    $this->call('POST', 'session'); 
} 

редирект получает «предназначен» должным образом, но, в соответствии с фактической функции она возвращает что-то (в частности экземпляр Illuminate \ Http \ RedirectResponse)

Вы можете посмотреть Illuminate \ Routing \ Redirector для дальнейшего понимания.