Po tym, jak w końcu udało mi się zdać mój głupi, prosty test, mam wrażenie, że nie robię tego poprawnie.Testy Laravel z PHPUnit i Mockery - Konfigurowanie zależności od testu kontrolera
Mam SessionsController, który jest odpowiedzialny za wyświetlanie strony logowania i logowania użytkownika w.
zdecydowałem się nie używać fasady tak, że nie będzie musiał przedłużyć laravel za TestCase i podjąć trafień wydajności na moich testach jednostkowych. W związku z tym, mam wszystkie zależności wstrzykiwany przez regulatora, jak tak -
SessionsController - Konstruktor
public function __construct(UserRepositoryInterface $user,
AuthManager $auth,
Redirector $redirect,
Environment $view)
{
$this->user = $user;
$this->auth = $auth;
$this->redirect = $redirect;
$this->view = $view;
}
Zrobiłem niezbędne deklarowania zmiennych i używając nazw, które nie będę zawrzeć tutaj jako niepotrzebne.
Metoda create wykrywa, czy użytkownik jest uprawniony, jeśli są one wtedy przekierowuję je do strony głównej, w przeciwnym razie są wyświetlane formularz logowania.
SessionsController - Tworzenie
public function create()
{
if ($this->auth->user()) return $this->redirect->to('/');
return $this->view->make('sessions.login');
}
Teraz do testów, jestem nowy na tym. Tak goły ze mną ..
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)
}
}
To wszystko przechodzi, ale nie chcę, aby zadeklarować wszystkie te wyśmiewany zależności dla każdego testu, że piszę w moim SessionsControllerTest. Czy istnieje sposób, aby zadeklarować te wyśmiewane zależności raz, powiedzmy, konstruktora? a następnie wywoływać je tam zmienne do kpiny?
Dziękuję za wszelkie sugestie i poświęcenie czasu na przeczytanie mojego pytania.
Dziękuję @ watcher! Doceniam twoją dokładną odpowiedź –
np., Miło mi pomóc –