[Symfony] Testowanie aplikacji |
[Symfony] Testowanie aplikacji |
6.09.2023, 13:14:38
Post
#1
|
|
Grupa: Zarejestrowani Postów: 569 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ę)?
Mam prośbę o pomoc w wykonaniu testowania. -------------------- I welcome you on the Internet >>> Design by Malina
|
|
|
20.09.2023, 22:57:24
Post
#2
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 6.10.2012 Ostrzeżenie: (0%) |
A pokaż Twig i Kontroler dla routa /login?
|
|
|
21.09.2023, 11:28:23
Post
#3
|
|
Grupa: Zarejestrowani Postów: 20 Pomógł: 6 Dołączył: 2.02.2010 Ostrzeżenie: (0%) |
Która wersja Symfony? Masz w kodzie
więc zakładam, że 5.1+ ten fragment:
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:
teraz możesz sprawdzic jakies inne rzeczy np. czy nastąpiło przekierowanie na stronę główną (o ile takie ustawiłeś):
albo czy zwrócona strona zawiera jakiś tekst np. "zalogowano", możesz też sprawdzić to po zasymulowaniu kliknięcia np:
|
|
|
25.09.2023, 14:28:11
Post
#4
|
|
Grupa: Zarejestrowani Postów: 569 Pomógł: 6 Dołączył: 21.07.2008 Ostrzeżenie: (0%) |
A pokaż Twig i Kontroler dla routa /login? Kontroler <!--Geshi:502619:php--><pre class="php-brief" style="font-family:monospace;"><div class="head">
i sypie błędem: FAILURES! Tests: 1, Assertions: 2, Failures: 1. dd($client->getResponse()->getContent()); daje jakiś wynik przekierowania chyba z vendora <body> Redirecting to <a href="/login">/login</a>.\n </body> i za chiny ten $formLogin nie loguje usera z formularza logowania? Ten post edytował Malinaa 25.09.2023, 14:31:10 -------------------- I welcome you on the Internet >>> Design by Malina
|
|
|
25.09.2023, 17:56:43
Post
#5
|
|
Grupa: Zarejestrowani Postów: 20 Pomógł: 6 Dołączył: 2.02.2010 Ostrzeżenie: (0%) |
3 sprawy:
1) jak się logujesz "ręcznie" - to działa? 2) kolega prosił o twiga formularza i kod kontrolera. Nie chodziło nam o wygenerowany kod w htmlu tylko o surowe pliki z twiga i klase controllera. Formularz powinien mieć dynamicznie generowany token csrf:
a w kontrolerze można dodać np:
i podejrzeć co jest nie tak. 3) Phpunit powinien dać Ci coś więcej niż tylko surową liczbę - wklej co mu tam nie pasuje. FAILURES! Tests: 1, Assertions: 2, Failures: 1. Ten post edytował jacek.e3 25.09.2023, 17:57:06 |
|
|
26.09.2023, 08:19:41
Post
#6
|
|
Grupa: Zarejestrowani Postów: 569 Pomógł: 6 Dołączył: 21.07.2008 Ostrzeżenie: (0%) |
Sprawy
1. Tak, wypełniam pole login, hasło, zaznaczam Agree terms i loguje się. 2. Przesłałem wygenerowany kod HTML, ponieważ tu wszystko widać i jest też token csrf
bynajmniej było widać, teraz to chyba forum nie poradziło sobie z formatowaniem i "brzydko" wyświetla w PHP plaintext dodatkowo przesyłam kod Twig {%- block form -%} {{ form_start(form) }} {{- form_widget(form) -}} {{ form_end(form) }} {%- endblock -%} w kontrolerze jest dodane: $error = $authenticationUtils->getLastAuthenticationError(); i nie pokazuje, aby coś tu było nie tak, chyba, że jest tu mowa o dodaniu w kontrolerze testowym? 3. Oprócz F - fail i liczby jest komunikat Deprecated: App\Shared\Uuid\Uuid implements the Serializable interface, which is deprecated. Implement __serialize() and __unserialize() instead (or in addition, if support for old PHP versions is necessary) in /var/www/src/Shared/Uuid/Uuid.php on line 11 Przesyłam ponownie klasę testu po wprowadzeniu zmian, o których pisałeś chociaż była już wcześniej podana
Powyższa klasa sypie błędem FAILURES... Nie działa. Ten post edytował Malinaa 26.09.2023, 08:34:24 -------------------- I welcome you on the Internet >>> Design by Malina
|
|
|
26.09.2023, 13:18:46
Post
#7
|
|
Grupa: Zarejestrowani Postów: 20 Pomógł: 6 Dołączył: 2.02.2010 Ostrzeżenie: (0%) |
Cały czas chodzilo o kontroler do logowania, a nie klase do testowania.
Jeżeli nie ma tam nic innego przy tym failure to w takim razie może wszystko jest tam ok. W zależności od wersji phpunit były różne defaultowe zachowania co zrobić z deprecation errorami. Zobacz tu: https://symfony.com/doc/current/components/...recation-helper
|
|
|
27.09.2023, 08:52:27
Post
#8
|
|
Grupa: Zarejestrowani Postów: 569 Pomógł: 6 Dołączył: 21.07.2008 Ostrzeżenie: (0%) |
Ten kontroler podałem w [PHP] pobierz, plaintext ale coś się tu poprzestawiało przy wyświetlaniu, stąd zmyłka (wiem, że podałem kod kontrolera, ale faktycznie gdzieś zaginął w akcji).
Jeśli jest error to raczej nie jest wszystko ok. Zobaczę co pod tym linkiem piszą. Dodałem
ale nadal wyświetla błąd. There was 1 failure: App\Tests\Controller\SecurityControllerTest::testLogin Failed asserting that Symfony\Component\HttpFoundation\RedirectResponse Object &00000000000009450000000000000000 ( ... ) is redirected and has header "Location" with value "/". Ten post edytował Malinaa 27.09.2023, 08:58:20 -------------------- I welcome you on the Internet >>> Design by Malina
|
|
|
27.09.2023, 09:20:01
Post
#9
|
|
Grupa: Zarejestrowani Postów: 20 Pomógł: 6 Dołączył: 2.02.2010 Ostrzeżenie: (0%) |
ok, ale jak kontrolera nie było tak dalej nie ma.
W końcu jest za to jakiś konkret. Dostajesz info, że adres strony nie zgadza się z adresem przekierowania. Do tego gdzieś tam wcześniej pisałeś, że content robi redirect na /login Pamiętasz to?
możesz zdumpować ten $error to się dowiesz, co to za problem. Mój obecny typ to - nieprawidłowy user /hasło a wynika to stąd, że developujesz na jednej bazie, ale do testów jest odpalana lustrzana baza z sufixem "_test" i w niej tez powinny byc zapisane dane do logowania dla tego usera. |
|
|
27.09.2023, 11:39:08
Post
#10
|
|
Grupa: Zarejestrowani Postów: 569 Pomógł: 6 Dołączył: 21.07.2008 Ostrzeżenie: (0%) |
Testuje, sprawdzam itp., ale coś to testowanie idzie jak krew z nosa
Klasa kontrolera
może z redirect mam coś zamieszane? dump($error) daje null w kontrolerze mamy if ($this->getUser()) {} i powinno przekierować, ale wygląda, że nie wchodzi do tego ifa, czyli nie loguje usera Pytanie co z bazą, bo czytam, że powinna być osobna "test", ale nie widzę tu żadnego połączenia i bazy "test", testuje na jednej bazie Ten post edytował Malinaa 27.09.2023, 11:45:03 -------------------- I welcome you on the Internet >>> Design by Malina
|
|
|
27.09.2023, 11:49:47
Post
#11
|
|
Grupa: Zarejestrowani Postów: 20 Pomógł: 6 Dołączył: 2.02.2010 Ostrzeżenie: (0%) |
Masz route "app_main"?
Masz usera w bazie testowej? Spróbuj dodać to dump($error) w kontrolerze i odpal test jeszcze raz; |
|
|
27.09.2023, 12:09:31
Post
#12
|
|
Grupa: Zarejestrowani Postów: 569 Pomógł: 6 Dołączył: 21.07.2008 Ostrzeżenie: (0%) |
Mam route 'app_main'
$router = static::getContainer()->get(UrlGeneratorInterface::class); $this->assertResponseRedirects($router->generate('app_main')); User jest bazie projektu, a że jest jedna baza to też jest w testowej! Chyba? Dodaje dump($error) w kontrolerze SecurityController i odpalam test jeszcze raz, otrzymuję null z dumpa i błąd... wcześniej wymieniony Kontroler test
Czy $formLogin['email'] = self::TEST_USER_LOGIN; $formLogin['password'] = self::TEST_USER_PASSWORD; wystarcza, aby się zalogować, czy cos tu brakuje? Sprawdzałem z np. dodatkowo $formLogin['agreeTerms'] = true; ale też daje ten sam błąd. A token, a zakodowane hasło itp.? Albo $formLogin = $crawler->selectButton('Login')->form() podpowiada, że powinno tu być value. Czy dla takiego buttona: <button type="submit" id="submit" name="submit" class="btn btn-primary">Login</button> value to na pewno: Login? Ten post edytował Malinaa 27.09.2023, 12:55:57 -------------------- I welcome you on the Internet >>> Design by Malina
|
|
|
27.09.2023, 17:22:29
Post
#13
|
|
Grupa: Zarejestrowani Postów: 20 Pomógł: 6 Dołączył: 2.02.2010 Ostrzeżenie: (0%) |
Masz jakis serwer z bazodanowy - mysql ?
Zaloguj się tam i wyświetl bazy danych. Sprawdź, czy jest tam baza danych z suffixem '_test'. Jak jest to wejdz do niej, sprawdz czy masz wszystkie tabele, a w szczegolnosci czy masz tabele z usarami i czy jest w niej rekord dotyczacy Twojego testowego konta. Sprawdź to, nie zakładaj że to jest to samo. defaultowy suffix do bazy w srodowisku testowy: app/config/packages/doctrine.yaml
|
|
|
4.10.2023, 11:26:13
Post
#14
|
|
Grupa: Zarejestrowani Postów: 569 Pomógł: 6 Dołączył: 21.07.2008 Ostrzeżenie: (0%) |
Ustawienia są tak zmienione, że powinno działać na bazie głównej (nie _test) i wygląda, że działa, ponieważ dla repozytorium podbiera dane z bazy bez problemu.
Przykład:
i otrzymuję dane usera z bazy. Znaczy się teoretycznie zakładam, a praktycznie sprawdziłem, że powinno działać tak samo, chociaż pewności nie mam jak to jest z tą bazą _test, na serwerze takiej nie mam, w ustawieniach jest zmienione, aby łączyło z bazą aplikacji. Po dodaniu dbname_suffix: '_test%env(default::TEST_TOKEN)%' aplikacja się wysypie, nie ma bazy _test. Patrzę jeszcze na. env, czy tutaj ma być APP_ENV=dev czy przy testach powinno być zmienione na APP_ENV=test? Ten post edytował Malinaa 4.10.2023, 11:28:26 -------------------- I welcome you on the Internet >>> Design by Malina
|
|
|
5.10.2023, 07:11:04
Post
#15
|
|
Grupa: Zarejestrowani Postów: 20 Pomógł: 6 Dołączył: 2.02.2010 Ostrzeżenie: (0%) |
Kod
sprawdzi tylko czy user o takim adresie jest w bazie. Nie sprawdzi czy hasło jest poprawne. W głównym folderze powinien byc plik konfiguracyjny do phpunit: phpunit.xml.dist w środku znajdziesz:
Skoro zmieniasz jakieś rzeczy z defaultowym configu i o nich nie piszesz, to nie oczekuj, że ktoś się domyśli co tam zmieniłes. Wrzuc całość na jakiegos githuba to wtedy bedzie sens to kontynuowac. |
|
|
5.10.2023, 07:23:26
Post
#16
|
|
Grupa: Zarejestrowani Postów: 569 Pomógł: 6 Dołączył: 21.07.2008 Ostrzeżenie: (0%) |
W phpunit.xml.dis mam
Przy testach może hasło koduje inaczej, pozostaje pytanie jak je sprawdzić? Nie za bardzo mogę udostępnić ten kod, ale dziękuje za informacje. -------------------- I welcome you on the Internet >>> Design by Malina
|
|
|
Wersja Lo-Fi | Aktualny czas: 27.09.2024 - 09:26 |