Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Symfony] Testowanie aplikacji
Malinaa
post
Post #1





Grupa: Zarejestrowani
Postów: 577
Pomógł: 6
Dołączył: 21.07.2008

Ostrzeżenie: (0%)
-----


Cześć,
chciałbym wykonać testowanie rejestracji i logowania w Symfony.

Symfony -> w katalogu tests/Controller/ utworzyłem plik SecurityControllerTest.php (test logowania),
gdzie chciałbym uzupełnic formularz danymi i zalogować użytkownika, następnie sprawdzić, czy jest zalogowany.

Napisałem taki kod, ale ciągle sypie errorami (coś tu rzeźbię)?

  1. <?php
  2.  
  3. declare(strict_types=1);
  4.  
  5. namespace App\Tests\Controller;
  6.  
  7. use App\Repository\UserRepository;
  8. use App\Tests\Integration\AbstractIntegrationWebTestCase;
  9.  
  10. class SecurityControllerTest extends AbstractIntegrationWebTestCase
  11. {
  12. public const TEST_USER_LOGIN = 'test@domain.com';
  13. public const TEST_USER_PASSWORD = 'test123';
  14.  
  15. public function testLogin(): void
  16. {
  17. $client = static::createClient();
  18. $crawler = $client->request('GET', '/login');
  19.  
  20. // Uzupelnij formularz danymi i zaloguj
  21. $dataLogin = [
  22. 'email' => self::TEST_USER_LOGIN,
  23. 'password' => self::TEST_USER_PASSWORD,
  24. //'submit' => 'Login',
  25. ];
  26.  
  27. //$formLogin = $crawler->filter('form')->form();
  28. $formLogin = $crawler->selectButton('Login')->form();
  29.  
  30. //$formLogin['email']->setValue(self::TEST_USER_LOGIN);
  31. //$formLogin['password']->setValue(self::TEST_USER_PASSWORD);
  32. //$formLogin['submit']->setValue('Login');
  33. // OFF $formLogin['_csrf_token"'] = 'It is generated automatically!';
  34.  
  35. //$client->submit($formLogin, $dataLogin);
  36.  
  37. //dd($client->getRequest()->request);
  38.  
  39. // Sprawdz, czy zalogowany -> sprawdza tylko czy email jest w bazie (IMG:style_emoticons/default/questionmark.gif) ?
  40. $repositoryUser = static::getContainer()->get(UserRepository::class);
  41. $testUser = $repositoryUser->findOneBy(['email' => self::TEST_USER_LOGIN]);
  42. $client->loginUser($testUser);
  43.  
  44. //dd($testUser);
  45.  
  46. $this->assertResponseIsSuccessful();
  47. }
  48. }


Mam prośbę o pomoc w wykonaniu testowania.

Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
jacek.e3
post
Post #2





Grupa: Zarejestrowani
Postów: 20
Pomógł: 6
Dołączył: 2.02.2010

Ostrzeżenie: (0%)
-----


Która wersja Symfony? Masz w kodzie
  1. $client->loginUser($testUser);
więc zakładam, że 5.1+

ten fragment:
  1. $repositoryUser = static::getContainer()->get(UserRepository::class);
  2. $testUser = $repositoryUser->findOneBy(['email' => self::TEST_USER_LOGIN]);
  3. $client->loginUser($testUser);

to takie ułatwienie, żeby od razu mieć zalogowanego usera do dalszych testów. Ten kod nawet nie dotyka formularza tylko ustawia usera ze zmiennej $testUser jako zalogowanego użytkownika.

co do reszty to spróbuj tak:
  1. $client = static::createClient();
  2. $crawler = $client->request('GET', '/login');
  3.  
  4. // Uzupelnij formularz danymi i zaloguj
  5. $dataLogin = [
  6. 'email' => self::TEST_USER_LOGIN,
  7. 'password' => self::TEST_USER_PASSWORD,
  8. //'submit' => 'Login',
  9. ];
  10.  
  11. //$formLogin = $crawler->filter('form')->form();
  12. $formLogin = $crawler->selectButton('Login')->form();
  13.  
  14. $formLogin['email'] = self::TEST_USER_LOGIN;
  15. $formLogin['password'] = self::TEST_USER_PASSWORD;
  16. $this->client->submit($formLogin);


teraz możesz sprawdzic jakies inne rzeczy np. czy nastąpiło przekierowanie na stronę główną (o ile takie ustawiłeś):
  1. // BTW. dodaj sobie router i generuj sciezki zamiast wstawiac je na sztywno
  2. $router = static::getContainer()->get(UrlGeneratorInterface::class);
  3. $this->assertResponseRedirects($router->generate('app_home'));


albo czy zwrócona strona zawiera jakiś tekst np. "zalogowano", możesz też sprawdzić to po zasymulowaniu kliknięcia np:

  1. $client->request('GET', '/home');
  2. $this->assertResponseIsSuccessful();
  3. $this->assertSelectorTextContains('h1', 'Witaj');


Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 2.10.2025 - 16:54