dbwebb-se / mvc

Course repo for the mvc and object orientation in frameworks course - mvc.
Other
1 stars 4 forks source link

Testning med sessioner i Laravel #20

Open joki20 opened 3 years ago

joki20 commented 3 years ago

Jag har fått problem vid testning där sessioner definieras inuti Laravel-klasser enligt session()->put('sessionsnamn', värde). Trots att jag definierar session genom put så får jag att "Class session does not exist". Hade inte problem med testning genom $_SESSION i kmom03.

mosbth commented 3 years ago

Jag har bara gissningar men det låter som att sessionen inte är startad när du kör enhetstesterna.

Jag hade försökt leta upp dokumentationen kring hur man skriver enhetstester i laravel för att jobba mot sessionen.

joki20 commented 3 years ago

Samma problem fortfarande. Kan inte utföra mina tester på grund av detta. Kollar här: https://laravel.com/docs/5.2/testing men kan inte hitta någon lösning.

image

Felet uppstår när jag anropar setPointsSession()

image

Det enda setPointsSessions() gör är att sätta igång sessioner, så på så sätt är ju sessionen startad?!

image

joki20 commented 3 years ago

Jag provade en väldigt enkel funktion att testa men med samma resultat:

image

Jag tolkar det som att vi behöver använda withsession enligt dokumentationen https://laravel.com/docs/5.2/testing#sessions-and-authentication

Men får inte till det ändå vid make phpunit

image

mosbth commented 3 years ago

Jag har inget svar.

Men generellt så hade jag först avgränsat problemet till ett testfall, en kodrad och ett felmeddelande. Det hade visat mig exakt den konstruktionen som ger felet. Kanske kan du klura ut det från ovan fel, men ibland (ofta) är det enklare att göra ett mindre testfall så det blir tydligt. Det hade iallafall underlättat att googla felet och att veta var i manualen jag bör leta. Dessutom hade det hjälpt dig att testa och se hur withSession fungerar (pröva läsa sessionen).

I manualen för test finns i inledningen en mening om vikten av att rensa cachen.

Någon påpekar en annan felkälla (men kommer felet inuti Laravel så känns det lite udda).

Probably you have used somewhere session instead of Session facade (capital S)

joki20 commented 3 years ago

Det är det jag har gjort i förra inlägget: skapat en enkel funktion med endast en session. Jag har anropat den utan withsession och provat med withsession. Dokumentationen har ett enda exempel där de anropar visit() efter withsession, som jag antar är en inbyggd funktion för att gå vidare till en annan sida? image

Jag har googlat felet och provat olika lösningar, även kört composer update och rensat all slags cache enligt https://github.com/laravel/framework/issues/17583 solution that work for me is composer update and php artisan cache:clear && php artisan route:clear && php artisan config:clear && php artisan view:clear hope this may help someone

Felet uppstår vid anrop till en klass med en skapad session inuti sig. Jag kan inte göra en enklare metod än den till höger: image

image

Hur ska jag göra om jag inte kommer runt det här problemet? Har suttit med detta en 10 timmar säkert nu, och hittar inget gammalt dbwebb-inlägg av någon som tar upp samma problem.

mosbth commented 3 years ago

Vi hittar ingen äldre information om detta, det är nya inslag i årets kurs.

Finner du ingen lösning inom rimlig tid så hoppa över (kommentera bort testfallen) och gå vidare.

Kanske stöter du på en lösning lite senare. Annars så skriver du bara av dig i redovisningstexten. Det blir bra att göra så. Kursen innehåller flera inslag där det är lätt att gräva ned sig. Man behöver själv ha ett grepp om vad som är rimligt och inte. Man kan alltid säga "pass" och gå vidare. Det finns ofta skälig anledning till varför man gör så (skriv i redovisningstexten).

joki20 commented 3 years ago

Tack, men tråkigt att behöva göra det just för att jag inte kan göra många tester då mitt projekt är väldigt beroende av sessioner. Gör också att det blir svårare att diskutera vissa saker i krav 3 optionella krav som kodkvalitet, enhetstester med kodtäckning och testbar kod?

mosbth commented 3 years ago

Ta en paus i två dagar och fokusera på något annat. Sånt kan ibland lätta upp saker.

Enda nackdelen med att kommentera bort testfallen blir din kodtäckning. Det är inte en så stor grej.