Symfony / PHPunit - Tester un service qui utilise TokenStorage en constructeur
Bonjour à tous,
Je sollicite votre aide car j'essaie d'écrire des tests unitaires pour un de mes services sous Symfony 4, et pour l'instant je suis dans les choux.
Ma classe AlerteService utilise différentes dépendances dans son constructeur, dont TokenStorageInterface qui me permet de récupérer l'id de l'utilisateur connecté.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
|
//AlerteService
class AlerteService
{
private $router;
private $entityManager;
private $clientAdresseRepository;
private $clientContactRepository;
private $clientRepository;
private $user_id;
public function __construct
(
RouterInterface $router,
EntityManagerInterface $entityManager,
TokenStorageInterface $tokenStorage
)
{
$this->router = $router;
$this->entityManager = $entityManager;
$this->user_id = $tokenStorage->getToken()->getUser()->getId();
$this->clientAdresseRepository = $entityManager->getRepository(ClientAdresse::class);
$this->clientContactRepository = $entityManager->getRepository(ClientContact::class);
$this->clientRepository = $entityManager->getRepository(Client::class);
}
public function alert(string $titre, string $message)
{
$alerte = new Alerte();
$alerte->setTitre($titre);
$alerte->setMessage($message);
$alerte->setUserId($this->user_id);
$this->entityManager->persist($alerte);
$this->entityManager->flush();
return true;
} |
Et voici le test que je tente d'effectuer en vain :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
class AlerteServiceTest extends TestCase
{
public function testalert()
{
$arg1Mock = $this->createMock(RouterInterface::class);
$arg2Mock = $this->createMock(EntityManagerInterface::class);
$arg3Mock = $this->createMock(TokenStorage::class);
$alerteService = new AlerteService($arg1Mock, $arg2Mock, $arg3Mock);
$result = $alerteService->alert('salut', 'message');
$this->assertEquals(true, $result);
}
} |
Qui me renvoie le message d'erreur suivant :
Citation:
App\Tests\Utils\AlerteServiceTest::testalert
Error: Call to a member function getUser() on null
Le problème reste le même si à la place j'écris :
Code:
$arg3Mock = $this->createMock(TokenStorageInterface::class);
Du coup je me demande si c'est mon test qui est incorrect, ou si c'est mon service et son constructeur qui pose problème :?
La moindre piste serait la bienvenue ...
Merci d'avance