Witam . Próbuje przetestować jedną klasę . No ale wyskakuje mi błąd w testach. Nie twierdzę, że nie mam źle za modelowanej klasy ale Chciałbym wyjść z tego problemu a nie potrafię.
To jest konstruktor klasy PushSql:
class PushSql {
protected $entityManager;
private $requestStack;
protected $user_active;
protected $imagemd;
public function __construct(EntityManager $em, RequestStack $requestStack, ContainerInterface $container, ImageMd $imagemd) {
$this->entityManager = $em;
$this->requestStack = $requestStack;
$this->user_active = $container->get('security.token_storage')->getToken()->getUser();
$this->imagemd = $imagemd;
}
A tutaj mam klasę testową:
<?php
namespace Tests\AppBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
use Symfony\Component\DomCrawler\Crawler;
use AppBundle\Service\Edit\Append\PushSql;
use AppBundle\Service\Edit\Append\ImageMd;
use Symfony\Component\BrowserKit\Cookie;
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
class PusqlSqlTest extends WebTestCase {
public $imagemd;
public $request;
public $pushsql;
public $container;
public $client;
public function testIsObject() {
$client = static::createClient(); $this->logIn();
$this->pushsql = new PushSql($this->entityManager, $this->request, $this->container, $this->imagemd);
}
public function setUp() {
$this->client = static::createClient(); $kernel = self::bootKernel();
$this->entityManager = $kernel->getContainer()->get('doctrine')->getManager();
$this->container = $kernel->getContainer();
$this->request = $kernel->getContainer()->get('request_stack');
$this->imagemd = new ImageMd($this->request);
}
public function logIn() {
$kernel = self::bootKernel();
$session = $kernel->getContainer()->get('session');
$userManager = $kernel->getContainer()->get('fos_user.user_manager');
$user = $userManager->findUserByUsername('tester');
$userManager->updateUser($user);
$firewall = 'main_firewall';
$token = new UsernamePasswordToken
($user, null, $firewall, array('ROLE_SUPER_ADMIN'));
$session->set('_security_' . $firewall, serialize($token)); $session->save();
$cookie = new Cookie($session->getName(), $session->getId());
$this->client->getCookieJar()->set($cookie);
}
}
No i niestety podczas tworzenia :
$this->pushsql = new PushSql($this->entityManager, $this->request, $this->container, $this->imagemd);
Wyskakuje mi błąd : Call to member function getUser.
Jak widać wyżej zasymulowałem utworzenie sesji z użytkownika ale niestety nic to nie dało.
Błąd wyskakuje gdy próbuje tutaj dostać obiektu User :
$this->user_active = $container->get('security.token_storage')->getToken()->getUser();
Wiem, że widocznie źle zamodelowałem tą klasę i nie może nie jest dobrą praktyką takie coś wstawianie do konstruktora ale może da się z tego jakoś wyjść?
Bo zasymulowanie sesji nie bardzo chyba pomogło...
Ten post edytował szypi1989 4.09.2018, 08:44:49