Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

PHPUnit testiranje endpointa Laravel + Tymonov JWT paket

[es] :: PHP :: PHPUnit testiranje endpointa Laravel + Tymonov JWT paket

[ Pregleda: 1018 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Zlatni_bg
Nikola S
Beograd

Član broj: 65708
Poruke: 4420
*.dynamic.sbb.rs.



+498 Profil

icon PHPUnit testiranje endpointa Laravel + Tymonov JWT paket31.07.2020. u 21:04 - pre 45 meseci
Pozdrav,

Imam problem pri pravljenju malo jaceg boilerplatea za API-je. Elem, sve radi kako treba ali mi test puca kada gadjam endpoint za logout ukoliko sam ulogovan korisnik. Postoje dva problema,

- Kada importujem, tj "use Tymon\JWTAuth\JWT" na vrhu testa, dobijam gresku pri pozivanju metode JWTAuth::userFrom jer je naravno pozivam staticki - a svuda na netu je tako pozivaju;
- Kada importujem samo naziv klase "JWTAuth" sve radi?! Naravno, PHPStorm prijavljuje gresku da klasa nije definisana kada prevucem kursor preko nje, kada prevucem kursor preko staticke metode u testu pise mi da klasa nije definisana ALI dobijem validan token i test prodje?!?!

Da ne duzim, ostavicu samo relevantan deo koda. Prvi slucaj kada sve radi:

Code (php):


namespace Tests\Feature;

use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithFaker;
use Namshi\JOSE\Test\SimpleJWSTest;
use Tests\TestCase;
use App\User;
//use Tymon\JWTAuth\Contracts\JWTSubject;
//use Tymon\JWTAuth\Contracts\Providers\JWT;
//use Tymon\JWTAuth\Facades\JWTFactory;
//use Tymon\JWTAuth\Facades\JWTProvider;
use JWTAuth; //tests fail if using default namespace for class


// ovde ide gomila testova, ovo gore se samo importovalo zbog prokletog PHPStorma a nikad se ne koristi, u potpunosti je YAGNI i komentovao sam ga dok ne vidim skroz da ga obrisem

    public function testLoggedInUserLogout() {
        $user = factory(User::class)->make();
        $this->actingAs($user)->assertAuthenticated('api');
        $user->save();
        $credentials = $this->json('POST', '/api/login', [
            'email' => $user->email,
            'password' => 'password'
        ]);
//        $token = $credentials->json('token');
        $token = JWTAuth::fromUser($user);
        //TODO DRY this out

        $response = $this->actingAs($user)->postJson('/api/logout', [], [
            'token_type' => 'bearer',
            'access_token' => $token
        ]);

        $response->assertStatus(200);
    }

 


Znaci, uspesno dolazim do endpointa i dobijam status 200. Dalje asertacije nisam pisao, za pocetak mi je bitno da dobijem bar toliko. Prva suluda stvar je sto sam komentovao zadavanje $token promenljive preko $credentials objekta, a ukoliko skroz komentujem gadjanje login endpointa, tacnije zadavanje $credentials dobijam status 500 :D

Ukoliko navedem pun namespace, "Tymon\JWTAuth\JWT", puca test i dobijam gresku da staticki pozivam metodu.

---

Znaci cilj je da bez gadjanja login rute izvucem token koji bi trebalo da dobijem uz pomoc fromUser metode koju ne mogu da pozovem, a svuda se poziva staticki, pripada toj klasi JWTAuth, znam da ko god koristi Laravel sigurno ima iskustva s njom. Kako da ciljam endpoint validnim tokenom koji se ne cuva u bazi vec moram da ga iscupam iz objekta a da koristim actingAs? :D

Elem, sve ovo je zbog toga sto hocu da napravim boilerplate sa stub-ovima preko php artisan komande za instant pravljenje API-ja kad mi to zatreba. Ovaj kod gore mora nekako da se sredi, a kako bih testovima zadrzao "privatnost", ne bih da definisem token kao neku private promenljivu u testu vec da bude nezavisan.

Nadam se da sam koliko toliko objasnio sta mi treba, znaci glavni i verovatno jedini problem je sto ne mogu da iscupam token od korisnika kog generisem (User klasa). Da batalim to i koristim auth helper?
THE ONLY EASY DAY WAS YESTERDAY
 
Odgovor na temu

Zlatni_bg
Nikola S
Beograd

Član broj: 65708
Poruke: 4420
*.dynamic.sbb.rs.



+498 Profil

icon Re: PHPUnit testiranje endpointa Laravel + Tymonov JWT paket31.07.2020. u 21:13 - pre 45 meseci
Da se nadovezem na ovo... mogu da postavim propertyje na pocetku klase, $user i $token recimo i da odradim metodu userLogin, da nju pozivam pri pocetku testova gde korisnik treba da bude ulogovan, ali nisam siguran koliko je to dobra praksa. Isprobao sam sad i testovi prolaze.
THE ONLY EASY DAY WAS YESTERDAY
 
Odgovor na temu

Zlatni_bg
Nikola S
Beograd

Član broj: 65708
Poruke: 4420
*.dynamic.sbb.rs.



+498 Profil

icon Re: PHPUnit testiranje endpointa Laravel + Tymonov JWT paket01.08.2020. u 06:44 - pre 45 meseci
Monolog do pomoci...

Uspevam da odradim preko @depends anotacije, ali imam problem sto iako mi tipa logovanje dependuje na pravljenje novog korisnika, DB se refreshuje. Je l' znaci da u svakom test caseu (svakoj metodi testa) moram ponovo da radim insert novog korisnika? To je normalno ponasanje pri testiranju DBa, da se svaka metoda radi sa refreshovanom bazom?
THE ONLY EASY DAY WAS YESTERDAY
 
Odgovor na temu

Tpojka
Ratio, Logic

Član broj: 60114
Poruke: 209

ICQ: 491318095


+33 Profil

icon Re: PHPUnit testiranje endpointa Laravel + Tymonov JWT paket01.08.2020. u 09:48 - pre 45 meseci
Upravo za to služe setUp i tearDown metode.
-A Tpojke su Đuro - šta?
-Osnovne jedinice diverzantskih grupa!
 
Odgovor na temu

Zlatni_bg
Nikola S
Beograd

Član broj: 65708
Poruke: 4420
*.dynamic.sbb.rs.



+498 Profil

icon Re: PHPUnit testiranje endpointa Laravel + Tymonov JWT paket01.08.2020. u 18:40 - pre 45 meseci
Hvala puno, jutro je bilo, i kasno vreme za pravljenje tako necega. Bukvalno sam u 10 legao i dok sam se uspavao skapirao da to koristim.

Sta bi valjalo da koristim kao minimum tu? Kreiranje korisnika da ostane u DBu samo i potom u testovima da cupam tokene ili odmah da ga iscupam? Znam da ima 100 nacina da se ovo odradi ali bih postovao dobru praksu.
THE ONLY EASY DAY WAS YESTERDAY
 
Odgovor na temu

Tpojka
Ratio, Logic

Član broj: 60114
Poruke: 209

ICQ: 491318095


+33 Profil

icon Re: PHPUnit testiranje endpointa Laravel + Tymonov JWT paket01.08.2020. u 20:44 - pre 45 meseci
Sve što ti znači da ti resursi ne idu kontaminirani u sljedeći test. Recimo u praznu bazu/tabelu ubaciš red. Izvedeš testove nad njim (user npr). I na kraju svakog testa ti se očisti tabela tako da u sljedeći test se ponovo ali automatski kreira user kojeg korisitiš.

Citat:
Zlatni_bg:To je normalno ponasanje pri testiranju DBa, da se svaka metoda radi sa refreshovanom bazom?


Ti baš i radiš sa bazom u ovom primjeru. Ne testiraš sesiju već podatak iz baze tako da je to sasvim normalno da se kreira user iznova.
-A Tpojke su Đuro - šta?
-Osnovne jedinice diverzantskih grupa!
 
Odgovor na temu

Zlatni_bg
Nikola S
Beograd

Član broj: 65708
Poruke: 4420
*.dynamic.sbb.rs.



+498 Profil

icon Re: PHPUnit testiranje endpointa Laravel + Tymonov JWT paket01.08.2020. u 21:02 - pre 45 meseci
Hvala puno na odgovoru, iskoristicu to cim se malo razbudim, nocas sam se dosta iscrpio sa nekim drugim funkcionalnostima, malo jos da se razbudim pa cu isprobati sve to. Imam samo dva pitanja:

1. Pri testiranju endpointa, tacno je da koristim DB i da testiram i bazu jer mi je to najsigurniji nacin da proverim da se sve funkcionalnosti izvrsavaju. Da li je dobra praksa u setUp metodi imati jednog korisnika koji ce se dalje koristiti u tom testu (znaci pricam o celoj klasi tog testa) ili je sigurnije da, kako si napisao kreiram korisnika i cupam token pri svakom novom testiranju sledeceg endpointa? Znam da ima 1001 nacin da se odradi sve ovo ali me zanima u praksi sta je najpouzdanije, u svim slucajevima testovi ce prolaziti, gledam da pisem sto vise usecase-ova pa me zato zanima.

2. Koji se djavo desava sa JWTAuth klasom? I dalje ne mogu da skapiram zasto ne mogu da je use-ujem preko punog namespace-a a da radi, dok pri \JWTAuth::funkcija sve radi kako treba, bez use-ovanja? Znam da postoji i fasada, ali ne mogu da shvatim zasto kada ucitam klasu koja ima metodu da od User objekta iscupa token to ne uradi sa full namespaceom? Ovo je verovatno moguce da mi odgovoris ako si bas koristio JWTAuth od Tymona. Na githubu sam video da su mnogi imali slican problem, ali mnogo malo ljudi pise testove, jedino sto sam video je da je niko ne importuje neko poziva preko \JWTAuth i to tako prolazi, sto meni iskreno nije bas "najdelikatnije" jer iako radi, ne bi trebalo tako da radi. A ni PHPStorm ne moze da iscupa metodu iz klase iako u samoj klasi ona postoji - nesto nije u redu.
THE ONLY EASY DAY WAS YESTERDAY
 
Odgovor na temu

Tpojka
Ratio, Logic

Član broj: 60114
Poruke: 209

ICQ: 491318095


+33 Profil

icon Re: PHPUnit testiranje endpointa Laravel + Tymonov JWT paket03.08.2020. u 19:23 - pre 45 meseci
1. Pa to najviše zavisi od vrste i načina testiranja. Al' ako je u pitanju konkretno testiranje registracije korisnika i ponašanje istog u aplikaciji onda ne vidim problem u korišćenju su/td metoda. Mislim nije da te košta nešto, da imaš desetine i desetine testnih metoda ovo će dodati još par sekundi ukupno na sve. Isto vidi za korišćenje in memory DB-a jer će biti brže (prva tri minuta ovog video klipa npr.)

2. JWTAuth ti ustvari daje alias provider-a. Tako da možeš importovati sa `use JWTAuth;` pa koristiti `JWTAuth` u nastavku ili koristiti `\JWTAuth` ali to je taj facade/provider/alias. Ako baš 'oćeš da koristiš fully namespaced package class možda bi trebalo da mu daš alias `use Tymon\JWTAuth\JwtAuth as JwAu;//i.e.`

Jesi li iš'o sve by the book?

Isto, laravel ide helper uglavnom može pomoći PHPStorm-u da ugleda metode.

-A Tpojke su Đuro - šta?
-Osnovne jedinice diverzantskih grupa!
 
Odgovor na temu

[es] :: PHP :: PHPUnit testiranje endpointa Laravel + Tymonov JWT paket

[ Pregleda: 1018 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.