Dopo aver finalmente superato il mio stupido test, ho la sensazione che non lo stia facendo correttamente.Test di Laravel con PHPUnit e Mockery - Impostazione delle dipendenze sul test del controller
Ho un SessionsController, che è responsabile per la visualizzazione di una pagina di accesso e la registrazione di un utente in.
ho deciso di non utilizzare le facciate in modo che non avrei dovuto estendere TestCase di laravel e prendere un calo di prestazioni sui miei test unitari. Pertanto, ho iniettato tutte le dipendenze attraverso il controller, in questo modo -
SessionsController - Funzione di costruzione
public function __construct(UserRepositoryInterface $user,
AuthManager $auth,
Redirector $redirect,
Environment $view)
{
$this->user = $user;
$this->auth = $auth;
$this->redirect = $redirect;
$this->view = $view;
}
ho fatto la necessaria dichiarazione di variabili e utilizzare gli spazi dei nomi, che io non ho intenzione per includere qui come non necessario.
il metodo di creazione rileva se un utente è autorizzato, se sono quindi li reindirizzo alla home page, altrimenti viene visualizzato il modulo di accesso.
SessionsController - Crea
public function create()
{
if ($this->auth->user()) return $this->redirect->to('/');
return $this->view->make('sessions.login');
}
Ora per il collaudo, sono nuovo di zecca ad esso. Così nudo con me ..
SessionsControllerTest
class SessionsControllerTest extends PHPUnit_Framework_TestCase {
public function tearDown()
{
Mockery::close();
}
public function test_logged_in_user_cannot_see_login_page()
{
# Arrange (Create mocked versions of dependencies)
$user = Mockery::mock('Glenn\Repositories\User\UserRepositoryInterface');
$authorizedUser = Mockery::mock('Illuminate\Auth\AuthManager');
$authorizedUser->shouldReceive('user')->once()->andReturn(true);
$redirect = Mockery::mock('Illuminate\Routing\Redirector');
$redirect->shouldReceive('to')->once()->andReturn('redirected to home');
$view = Mockery::mock('Illuminate\View\Environment');
# Act (Attempt to go to login page)
$session = new SessionsController($user, $authorizedUser, $redirect, $view);
$result = $session->create();
# Assert (Return to home page)
}
}
Questo tutti i passaggi, ma io non voglio avere a dichiarare tutte queste dipendenze deriso per ogni test che scrivo nel mio SessionsControllerTest. C'è un modo per dichiarare queste dipendenze derise una volta nel dire un costruttore? e poi chiamarli da lì variabili per deridere?
Grazie per eventuali suggerimenti e il tempo di leggere la mia domanda.
Grazie a voi @watcher! Apprezzo la tua risposta completa –
np, felice di aiutare –