Unit Testing - HeroPhil/DHBW-KinoCinema GitHub Wiki
Unit-Testing
Zur Verbesserung der Software qualität sind Methoden mit logischen Algorithmen im Backend durch Unit-Tests abgesichert.
Neben den Logik-Tests wird auch exemplarisch die Integration der Datenbank anhand einer getter-Methode getestet.
Unter functions/test
finden sich in der selben Dateistruktur wie die Methoden unter functions/src
die entsprechenden Tests.
Bei durchlaufen der CICD-Pipeline werden all Backend Tests ausgeführt.
Framework
Zur Ausführung der Tests werden die Frameworks chai
und mocha
verwendet.
Die assertion libary von chai
wird durch den test runner von mocha
mit node.js
angewendet.
Liste aller Tests
Database
Der Test der getMovieByID Methode ist repräsentativ für alle anderen getter-Methoden, welche ein Dokument ohne Logik aus der Datenbank lesen.
Methoden Name | Test Bezeichnung |
---|---|
getMovieByID | gets a Movie Object by a given ID |
Logik
Testabdeckung der Logik Methoden beträgt 100%
Methoden Name | Test Bezeichnung |
---|---|
checkIfAnyLogin | should return an error if no user is logged in (checked via context) |
countRowsOfScreening | should return count of rows from a given Screening |
getRowTypeIndex | should return index of the rowtype for a given row |
createEmptyHallSeatArray | should return an 2D boolean array filled with false |
markSeatAsOccupied | should mark fields in a 2D array based on cords from Ticket |
checkIfSeatIsValidInScreening | should eval if a given number pair is in a specified range of a screening hall |
Weitere Tests
Firebase Emulator Suit
Neben Unit-Tests stehen entwicklern auch die möglichkeit der lokalen Firebase Emulator Suit zur verfügung. So lässt sich das komplette front- und backend lokal hosten und loggen. Dafür stehen folgende Node scripts in der functions/package.json
zur verfügung
lokale Anmeldung der
firebase console
undgoogle cloud console
sind Vorraussetzung
Script | Beschreibung |
---|---|
exportFirestore | clont die live firestore Datenbank und speichert sich einen Google Cloud Storage Bucket |
downloadFirestore | speichert die geclonte firestore Datenbank in einen lokal ordner (functions/.local/ ) |
serve-local | startet alle relevanten lokalen Emulatoren (hosting, functions, firestore, auth, storage) und lädt die lokale firestore aus dem functions/.local/ verzeichnis |
(lokale) Änderungen in der firestore sind nicht persistent bei Emulator neustart
ESlint
Sowohl im frontend als auch das backend sind ESlint Prüfungen konfiguriert. Diese werden bei ausführung der CICD-Pipeline angewendet. Jedoch können diese mit dem node script lint
im entsprechenden Verzeichnis (functions/
, public/
) auch lokal ausgeführt werden. Es empfiehlt sich vor jedem commit einen solchen Test lokal auszuführen.