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 und google 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.