• Ingen resultater fundet

A.8 Vælg afdelinger, n˚ ar afdelingsdimensionen er valgt i analyseme-

7.1 Test af Web API Anmodninger

7.1.1 Web API Endpoints Tests

I dette afsnit vil jeg teste om alle mineweb apiendpoints kan blive anmodet med success. Jeg bekymrer mig ikke om jeg f˚ar det forventede resultat— jeg er blot interesseret i atweb api urls giver et svar, n˚ar enajaxanmodning bliver sendt, og at et eller andet data returneres.

Jeg har skrevet nogleQUnittests baseret p˚a dens ok() assertion, som har denne signatur:

ok( state, message )

state angiver et udtryk, der evaluerer tiltrue eller false. messageer en beskriverlse afassertion. For at køreQUnittest, skrives testen iJavaScriptfil (eller <script>tag ihtmlfilen), som indkluderes i en html side oprettet til form˚alet. I html siden refereres derudover, til QUnit css- og JavaScript filer.

Jeg har oprettet en mappe ved navnTesti Web projektetBMWebsite i Visual StudioSolution. Her har jeg oprettet en undermappe ’QUnit’ medQUnitcss- og JavaScriptfiler, og en anden mappe ’web api’, som indeholder alle mine testfiler (JavaScript- oghtml) til test af web api.

7.1.1.1 Testen Jeg vil teste følgende:

• Om web apiendpoints kan forespørges med success, ved at sendehttp getrequeststil hver af dem, foretaget viaajax.

• Om alle dissegetrequestsresulterer i nogle data, somweb api url’erne returnerer.

Testfilen

webapi.endpoint.tests.js

1Create, Update, Delete

2http://qunitjs.com/

7.1. TEST AF WEB API ANMODNINGER KAPITEL 7. TEST

Testrunner

webapi.endpoint.tests.html

Alle mineweb api url’er defineret iJavaScriptfilenappSettings.js, som jeg sender en instans af rundt til alle mine view models. I min testfil refererer jeg til denne fil, og henter alleweb apiadresserne, som jeg gemmer i et array. Jeg løber arrayet igennem i en løkke, definerer QUnitasyncTest, som jeg giver et navn og encallback funktion, der skal kører i testen, for hver urli arrayet.

callbackfunktionen er vist i kodeoversig 7.1 nedenfor.

Listing 7.1:Test afweb api Endpoints.

1 // T e s t o n l y t h a t t h e W e b A P I r e s p o n d e d to t h e r e q u e s t w i t h ’ s u c c e s s ’

2 var e n d p o i n t T e s t = f u n c t i o n ( url ) {

3 $ . a j a x ({

4 url : url ,

5 d a t a T y p e : ’ j s o n ’,

6 s u c c e s s : f u n c t i o n ( r e s u l t ) {

7 ok (true, ’ GET s u c c e e d e d for ’ + url ) ;

8 ok (!! result , ’ GET r e t r i e v e d s o m e d a t a ’) ;

9 s t a r t () ;

10 } ,

11 e r r o r : f u n c t i o n ( r e s u l t ) {

12 ok (false, s t r i n g f o r m a t (’ GET on \ ’{0}\ ’ f a i l e d w i t h

13 s t a t u s =\ ’{1}\ ’: {2} ’, url , r e s u l t . status ,

14 r e s u l t . r e s p o n s e T e x t ) ) ;

15 s t a r t () ;

16 }

17 }) ;

18 };

Denne metode bliver anvendt som en callback i QUnit test definitionen, som er vist nedenfor:

// Test each endpoint in apiUrls

for (var i = 0; i < apiUrlsLength; i++) { var apiUrl = apiUrls[i];

// Arguments: testName, callback

asyncTest(’API can be reached: ’ + apiUrl,

endpointTest(apiUrl));

};

Som det kan ses, løber jeg mit array ’apiUrls’ igennem, og kalde kaldeQUnit asyncTesttesten for hverweb api url, og giver den mincallbackfunktion (figur 7.1), som kører i testen. N˚arajaxanmodningen bliver udført med success, bruger jeg først ok() assertion med udrykket true, fordi anmodningen var en success, og igen med udtrykket!!result, som konvertere resultobjektet tilboolean værdi— hvis resulter defineret, evaluerer udtrykket til true, og ellers til false. Fordi det er en asynkron test, skal testen vente med at køre indtilajax anmodningen er færdig. Derfor har QUnitmetoden start(), som det fremg˚ar af kodeoversigt 7.1, linie 9. Fordi jeg definerer enasyncTest(...),

7.1. TEST AF WEB API ANMODNINGER KAPITEL 7. TEST

QUnitvil sætte kørsel af testen p˚a pause indtil den f˚ar en notifikation. Det er præcis hvadstart()gøre— at fortælleQUnitfortsætte kørslen.

7.1.1.2 Kørslen

Testen køres, som nævnt, i en html side. Jeg navngiver JavaScript filen, som indeholder testen, og htmlsiden, som vil kører testen, med samme navn. P˚a den m˚ade er det nemt at se, at de hører sammen. Nedenfor i kodeoversigt 7.2 er vist minhtmlside, som kører minweb api endpointstest. Filen kaldes ogs˚a forTestrunner iQUnitterminoligi.

Listing 7.2:Kørsel afweb api endpointstests - (Testrunner).

1 <h1 id=" qunit - h e a d e r "> BM D a s h b o a r d M i g r a t i o n - Web API E n d p o i n t A s y n c T e s t s < /h1>

2 <h2 id=" qunit - b a n n e r "> < /h2>

3 <div id=" qunit - t e s t r u n n e r - t o o l b a r "> < /div>

4 <h2 id=" qunit - u s e r A g e n t "> < /h2>

5 <ol id=" qunit - t e s t s "> < /ol>

6 <div id=" qunit - f i x t u r e "> t e s t markup , w i l l be h i d d e n < /div>

7

8 <s c r i p t src=" // a j a x . g o o g l e a p i s . com / a j a x / l i b s / j q u e r y / 1 . 1 0 . 2 / j q u e r y . min . js "> < /s c r i p t>

9 <s c r i p t src=" ../ q u n i t / q u n i t . js "> < /s c r i p t>

10 <s c r i p t src=" . . / . . / S c r i p t s / J a v i d / a p p S e t t i n g s . js "> < /s c r i p t>

11 <s c r i p t src=" w e b a p i . e n d p o i n t . t e s t s . js "> < /s c r i p t>

Som vist i kodeoversigt 7.2 foroven, indkluderer jeg først nogle standard QUnitmarkup. Derefter tilføjer jeg nogle referencer, fx tiljQuery,QUnit biblio-teket og den testfil jeg har skrevet. Ved at ˚abner denne fil i en browser, bliver mine tests eksekveret, og resultatet kan læses, som det fremg˚ar af figur 7.1 ne-denfor. Figuren viser resultatet af testkørslen, og som det kan ses, har jeg foldet nogle af testerne ud s˚a de enkelteassertionskan studeres. Der er to ting, der er nævneværdige i forhold til resultatet; først, som det kan ses i figuren, er der en test, der har fejlet. Dette er fordi jeg, med vilje, introducerede et ’FakeEndpoint’

i mit array af web api urls, dvs. resultatet er som forventet. Det er en god m˚ade at ’teste’ testværtøjet p˚a. S˚a min test af testværktøjet var successfuld, Det ses at testen har fejlet, da den prøvede at kontakteweb api med adres-sen /BMWebsite/api/FakeEndpoint. Testen udskriver fejlbeskeden, som ajax anmodningen returnerede. Der er en god grund til at testen fejler— der findes ikke enweb apiController med navnetFakeEndpointController.

Det andet jeg vil nævne, er i forhold til den første test i figuren—getAction metoden iKpiController.cs web apiControlleren, forventer noget data (KpiConfig), n˚ar der sendes engetanmodning til den. Det bliver sendt som en del afQueryStringiurlen, som p˚a server siden vil blive mappet tilkpiConfig parameteren i Controllerens get metode. Hvis QueryString ikke indeholder disse data, returnerer jeg i Action metoden enHttpResponseException med HttpStatusCode.NotFound. Derfor, for at kunne teste denneweb apiadresse, skal jeg indkludere et objekt med kpi konfigurationer iajaxanmodningen i min

7.1. TEST AF WEB API ANMODNINGER KAPITEL 7. TEST

test.jQuerysajaxmetoden vil serialisere dette objekt tilQueryString format og sætte det sammen den egentlige url. Dette er hvad man kan se i testen assertionnummer 2.

7.1.TESTAFWEBAPIANMODNINGERKAPITEL7.TEST

112

7.1. TEST AF WEB API ANMODNINGER KAPITEL 7. TEST