Många testverktyg förutsätter en viss kunskap av Javascript för att kunna nå sin fulla potential. De flesta kurser i Javascript tar avstamp i Node.js vilket är en omväg för att lära sig Javascript om man är testare och därför mest arbetar med att interagera med serversidan från klientsidan.
Dessa övningar kommer att köras i en webbläsare och texteditor, som t.ex. Notepad, Notepad++, Visual Studio Code eller liknande.
Vilken editor som används är i grunden egalt, men man får mer stöd i t.ex. Visual Studio Code än i Notepad.
Det finns några grundläggande saker man behöver förstå för att kunna använda Javascript som testare.
Javascript kom till under en hackaton-helg där två personer ville ta fram ett programmeringsspråk för att manipulera innehållet i webbsidor på klientsidan.
Webbsidor bestod på den tiden av HTML-filer, så det var elementen på dessa sidor man ville manipulera.
Programmeringsspråket Java var hett på den här tiden så, utan att det finns någon teknisk koppling mellan Java och Javascript så åkte man snålskjuts på Javas popularitet genom att inkludera Java som en del i namnet.
Sedan dess har Javascript gått igenom många utvecklingssteg för att bli det som vi använder idag.
Javascript har länge använts på klientsidan och har stöd i alla välspridda webbläsare.
På serversidan finns implementationer som Node.js som innehåller paketdistributionsmekanismer och mycket mer.
Varje kommando i Javascript avslutas med semikolon. Det finns en inbyggd felhantering i Javascript så det händer att det fungerar ändå, men det är en god praxis att vänja sig vid att alltid använda semikolon efter varje kommando.
console.log('Hejsan javascriptivrare');
Olika programmeringsspråk har olika sätt att markera kodrader som hör ihop och ska ses som en sammahållen enhet även om det är flera rader.
Python och YAML använder indrag som markering, medan Javascript har inspirerats av Java, C# och liknande språk och använder måsvingeparenteser.
function getCurrentDate(){ var date = new Date(); console.log(date); return date; }
Notera att i exemplet ovan exekveras alla tre kodraderna i funktionen eftersom de omges av måsvingeparenteser.
Javascript exekveras generellt uppifrån och ner som det står. Det finns dock några undantag, som asynkrona funktioner och callbacks vilket t.ex. kan vara användbart vid parallell exekvering. Det är dock mer vanligt att vi i testsammanhang exekverar tester sekventiellt.
Den notation som Javascript använder för att beskriva programatiska objekt i textform (serialiserade objekt) har blivit standard för att överföra data och kallas för JSON.
Inbyggt i Javascript finns några grundläggande typer av objekt. Man kan hantera heltal (integer), decimaltal, textsträngar, tecken och boolska (true/false) objekt.
Typ | Namn | Exempel |
---|---|---|
Heltal | Integer | 123 |
Teststrängar | string | javascriptkurs |
Sant/falskt | Boolean | true |
Även komplexa objekt, som t.ex. datum, består i grunden av något av dessa, eller en kombination av dessa.
De flesta tecken är tillåtna i Javascript. Språket är dock skiftlägeskänsligt, så en variabel som heter hjulantal
är t.ex. inte densamma som HjulAntal
.
En av grunderna i Javascript är att man kan dela upp sin kod i enkelt förvaltningsbara smådelar som man anropar från andra delar av koden.
Dessa kallas för funktioner och deklareras med ordet function
.
Man kan skicka med inparametrar till en funktion, men man måste inte det. Vill man ha med parametrar in gör man det inom parenteser:
function welcomeMessage(){ alert "Hello world!"; }
I funktionen ovan skickar vi inte med några inparametrar, det är därför parentesen efter funktionsnamnet är tom.
Funtionen visar en popup-ruta med texten Hello world!
.
En bra funktion är fristående, återanvändningsbar, och får med sig alla de parametrar den behöver in. Den har också ett namn som gör att man förstår vad den gör.
Vill vi göra denna funktion mer generisk kan vi lägga till en inparameter med den text som ska visas:
function welcomeMessage(message){ alert(message); }
För att använda denna funktion behöver vi anropa den:
function welcomeMessage(message){ alert(message); } welcomeMessage("Hejsan världen!"); //Öppnar en popup med texten 'Hejsan världen!'
Notera att även om scriptet läses uppifrån och ner så registreras bara funktionen, men den kommer inte att användas innan den anropas.
I denna övning ska vi skapa vår första funktion. Först måste vi dock se till att vi har en grund.
Övningar
exercise1.jsi en valfri texteditor och klistra in följande text i den:
function init(){ alert("Hej!"); }
excercise1.js-filen och öppna därefter filen
exercise1.html
I HTML-filen finns en referens på body
-tagen som heter onload
. Denna anger vilken metod som ska köras när sidan är laddad. I vårt fall är det funktionen init()
som står angiven så det som händer i din javascript-funktion med namnet init
är det som händer så fort sidan är laddad.
I vårt fall handlar det om att det ska dyka upp en popup av typen alert
med texten Hej!
i sig.
Variabler är väsentliga för vilket programmeringsspråk som helst.
Man kan tänka på variabler som en låda man kan lägga saker i.
Man kan t.ex. ha en låda märkt Ordernummer
, och där kan man tänka sig att man lägger i en lapp med ett ordernummer på.
När man pratar om variabler bör vi också nämna konstanter. Variabler är som lådor där man kan ändra innehållet, medan konstanter är som lådor man lägger i något i en gång och sedan inte kan ändra det.
Variabler kan vara mer eller mindre komplexa. En variabel som heter var familyName = "Damberg";
har ett enkelt strängvärde,
men ska man t.ex. låta en variabel vara en personuppgift med adress, telefonuppgifter, namn och så vidare så blir det en mer komplicerad struktur.
var testPerson = { name: "Guran", familyName: "Lanister", addressList: [ { addressType: "Work address", streetAddress: "Storgatan 15", postalCode: "111 15", city: "Stockholm" }, { addressType: "Home address", streetAddress: "Lillgatan 5", postalCode: "182 43", city: "Sundbyberg" } ], phoneNumbers: [ { numberType: "Personal mobile", number: "+467632523" }, { numberType: "Work", number: "+46812345677" } ], emailAddresses: [ emailAddress: "no.no@no.no", verified: true ] }
Den som har sett JSON-formatterat data förr känner ingen syntaxen för sammansatta variabler.
I variabeldeklarationen ovan finns både likamedtecken och kolon för tilldelning vilket kan vara ganska förvirrande.
Det beror på att man skiljer på variabler och och objekt-fält. I detta fall deklarerar vi en variabel som har namnet testPerson
och likamedtecknet används för att tilldela denna variabel ett objekt.
Tilldelning sker med likamedtecknet.
Objektet i sig har olika namngivna fält och värden som tilldelas dessa fält sätts med kolon.
Om du är mer nyfiken på variabler, googla gärna skillnader på var
, let
och const
samt hur en variabels scope påverkar var den finns nåbar.
Om detta, så gör detta
Det är mycket vanligt att man vill styra programexekveringen till olika kommandosekvenser beroende på någonting.
Denna mekanism kallas för en selektion. I de flesta programmeringsspråk görs detta på snarlikt sätt - med en så kallad if-sats.
if(personAge == 20){ welcomePhrase = "Välkommen till Systembolagets shoppingsidor, kära nya kund!"; } else if(personAge < 20){ welcomePhrase = "Välkommen till ANT-informationen."; } else { welcomePhrase = "Tips till kräftskivan"; }
I kodstycket ovan avgränsas olika kodblock av måsvingeparenteser, alltså {}
.
Man använder ofta variabler för att kunna göra jämförelser eller återanvända värden. Jämförelser görs i Javascript med dubbla eller trippla likamedtecken.
Det finns tillfällen då man vill använda tre likamedtecken i rad. I Javascript betyder det att man jämför värden OCH värdets typ.
Jämförelse | Symbol |
---|---|
Lika med (i text eller sträng) | == |
Lika med (i värde OCH typ) | === |
Inte lika med | != |
Större än | > |
Mindre än | < |
Större än eller lika med | >= |
Mindre än eller lika med | <= |
Det går också att ha flera jämförelser på rad med hjälp av logiska operander (AND, OR).
Operand | Betydelse |
---|---|
&& | AND (båda jämförelserna måste vara sanna för att helheten ska vara sann) |
|| | OR (minst en av jämförelserna måste vara sann för att helheten ska vara sann) |
Exempel:
if(applicant.age >= 18 && applicant.type == "local"){ approveApplicant(applicant); } if(applicant.age >= 65 || applicant.grantStatus == "withdrawn"){ removeApplicant(applicant); }
Tjohoo!när du skriver in ditt eget namn.