Jak na mock IUserStorage pro testování přihlášeného uživatele?
- Milo
- Nette Core | 1283
Můžeš k tomu použít nějakou knihovnu, třeba Mockery, která chování jakékoliv třídy emuluje. Anebo si napsat vlastní triviální implementaci, která bude vracet identitu, jakou chceš.
class MockUserStorage implements Nette\Security\IUserStorage
{
public function setAuthenticated($state) {}
public function isAuthenticated() { return TRUE; }
...
...
public function getIdentity()
{
return new ... jakoukoliv identitu chces...;
}
}
- motorcb
- Člen | 552
Super, díky.
Udělal jsem si MockUserStorage:
<?php
class MockUserStorage implements Nette\Security\IUserStorage
{
public function setAuthenticated($state) { }
public function isAuthenticated() { return TRUE; }
public function setIdentity(IIdentity $identity = NULL) { }
public function getIdentity(){
return new Nette\Security\Identity( 1, "admin", array( "name" => "Pan Tau" ) );
}
public function setExpiration($time, $flags = 0) { }
public function getLogoutReason() { }
}
Jak ji nyní zapojím do svých testů?
- mkoubik
- Člen | 728
Pokud testuješ celou aplikaci tak si kromě config.neon
ještě
načti test.neon
kde si přepíšeš službu
nette.userStorage
tou svojí implementací.
Pokud píšeš unit test presenteru, tak si ji předej ručně do
$presenter->injectPrimary(...)
, ale pohodlnější je si ho taky
tahat z kontejneru.
- motorcb
- Člen | 552
OK, udělal jsem si config.tester.neon ve kterém je:
nette:
services:
nette.userStorage:
class: MockUserStorage
V bootstrapu pro testy mam:
...
$configurator->addConfig(__DIR__ . '/../app/config/config.neon');
$configurator->addConfig(__DIR__ . '/../app/config/config.tester.neon');
...
Pri spusteni testu mi to pise:
-- FAILED: tests\LoginTest.phpt
Exited with error code 255 (expected 0)
Nette\DI\ServiceCreationException: Class MockUserStorage used in service 'nette.nette.userStorage' has not been found or is not instantiable.
Kam mam umístit třídu MockUserStorage aby ji nette vidělo? Niní je v tests/MockUserStorage.php
- motorcb
- Člen | 552
Díky, zase jsem se posunul dál:
Vše již projde, můj mock objekt:
<?php
class MockUserStorage implements Nette\Security\IUserStorage
{
private $authenticated;
private $identity;
public function setAuthenticated($state)
{
$this->authenticated = $state;
}
public function isAuthenticated()
{
return $this->authenticated;
}
public function setIdentity( Nette\Security\IIdentity $identity = NULL )
{
$this->identity = $identity;
}
public function getIdentity()
{
return $this->identity;
}
public function setExpiration($time, $flags = 0)
{
}
public function getLogoutReason()
{
return NULL;
}
}
Jak napíšu test kterým otestuji přihlášení uživatele:
Nette\Security\Identity( 1, "admin", array( "name" => "Pan Tau" ) )
Jak otestuji že přihlášený uživatel má jméno „Pan Tau“ a je admin?
Díky