115 lines
5.1 KiB
JavaScript
115 lines
5.1 KiB
JavaScript
// 🧪 JS 08: Testsuite für Fehlerbehandlung, Debugging & Error-Klassen
|
|
|
|
if (typeof assert === "undefined") {
|
|
var assert = require("assert");
|
|
}
|
|
|
|
// ==========================================
|
|
// 1. Tests für die Error-Klassenhierarchie
|
|
// ==========================================
|
|
const appErr = new AnwendungsFehler("Basis Anwendungsfehler");
|
|
assert.ok(appErr instanceof Error, "AnwendungsFehler muss von Error erben");
|
|
assert.ok(appErr instanceof AnwendungsFehler, "appErr muss Instanz von AnwendungsFehler sein");
|
|
assert.strictEqual(appErr.name, "AnwendungsFehler", "appErr.name sollte 'AnwendungsFehler' sein");
|
|
assert.strictEqual(appErr.message, "Basis Anwendungsfehler", "appErr.message prüfen");
|
|
|
|
const valErr = new ValidierungsFehler("Ungültige E-Mail", "email");
|
|
assert.ok(valErr instanceof Error, "ValidierungsFehler erbt von Error");
|
|
assert.ok(valErr instanceof AnwendungsFehler, "ValidierungsFehler erbt von AnwendungsFehler");
|
|
assert.ok(valErr instanceof ValidierungsFehler, "valErr ist Instanz von ValidierungsFehler");
|
|
assert.strictEqual(valErr.name, "ValidierungsFehler", "valErr.name sollte 'ValidierungsFehler' sein");
|
|
assert.strictEqual(valErr.feld, "email", "valErr.feld sollte 'email' sein");
|
|
|
|
const gutErr = new GuthabenFehler("Zu wenig Geld", 50, 100);
|
|
assert.ok(gutErr instanceof Error, "GuthabenFehler erbt von Error");
|
|
assert.ok(gutErr instanceof AnwendungsFehler, "GuthabenFehler erbt von AnwendungsFehler");
|
|
assert.ok(gutErr instanceof GuthabenFehler, "gutErr ist Instanz von GuthabenFehler");
|
|
assert.strictEqual(gutErr.name, "GuthabenFehler", "gutErr.name sollte 'GuthabenFehler' sein");
|
|
assert.strictEqual(gutErr.saldo, 50, "gutErr.saldo sollte 50 sein");
|
|
assert.strictEqual(gutErr.betrag, 100, "gutErr.betrag sollte 100 sein");
|
|
|
|
// ==========================================
|
|
// 2. Tests für sichereDivision
|
|
// ==========================================
|
|
assert.strictEqual(sichereDivision(10, 2), 5, "sichereDivision(10, 2) sollte 5 ergeben");
|
|
assert.strictEqual(sichereDivision(-20, 4), -5, "sichereDivision(-20, 4) sollte -5 ergeben");
|
|
|
|
// Division durch Null
|
|
let divNullGefangen = false;
|
|
try {
|
|
sichereDivision(10, 0);
|
|
} catch (err) {
|
|
divNullGefangen = true;
|
|
assert.ok(err instanceof AnwendungsFehler, "Division durch Null sollte AnwendungsFehler werfen");
|
|
}
|
|
assert.ok(divNullGefangen, "Division durch 0 muss einen Fehler werfen");
|
|
|
|
// Ungültige Typen
|
|
let invalidTypeGefangen = false;
|
|
try {
|
|
sichereDivision("abc", 2);
|
|
} catch (err) {
|
|
invalidTypeGefangen = true;
|
|
assert.ok(err instanceof ValidierungsFehler, "Nicht-Zahlen sollten ValidierungsFehler werfen");
|
|
}
|
|
assert.ok(invalidTypeGefangen, "sichereDivision mit Strings muss ValidierungsFehler werfen");
|
|
|
|
// ==========================================
|
|
// 3. Tests für parseBenutzerJson
|
|
// ==========================================
|
|
const validJson = '{"name": "Lisa", "alter": 28}';
|
|
const userObj = parseBenutzerJson(validJson);
|
|
assert.deepStrictEqual(userObj, { name: "Lisa", alter: 28 }, "Gültiges JSON sollte geparst zurückgegeben werden");
|
|
|
|
// Syntaxfehler im JSON
|
|
let syntaxErrGefangen = false;
|
|
try {
|
|
parseBenutzerJson('{ ungueltiges: json ]');
|
|
} catch (err) {
|
|
syntaxErrGefangen = true;
|
|
assert.ok(err instanceof ValidierungsFehler, "Syntaxfehler muss als ValidierungsFehler abgefangen werden");
|
|
assert.strictEqual(err.feld, "jsonString", "Fehlerfeld bei SyntaxError sollte 'jsonString' sein");
|
|
}
|
|
assert.ok(syntaxErrGefangen, "Ungültiges JSON muss abgefangen werden");
|
|
|
|
// Fehlendes 'name' Feld
|
|
let nameErrGefangen = false;
|
|
try {
|
|
parseBenutzerJson('{"alter": 30}');
|
|
} catch (err) {
|
|
nameErrGefangen = true;
|
|
assert.ok(err instanceof ValidierungsFehler, "Fehlendes 'name' muss ValidierungsFehler werfen");
|
|
assert.strictEqual(err.feld, "name", "Fehlerfeld sollte 'name' sein");
|
|
}
|
|
assert.ok(nameErrGefangen, "Objekt ohne 'name' muss abgelehnt werden");
|
|
|
|
// ==========================================
|
|
// 4. Tests für pruefeTransaktion
|
|
// ==========================================
|
|
assert.strictEqual(pruefeTransaktion(500, 200), 300, "500 - 200 sollte Saldo 300 ergeben");
|
|
assert.strictEqual(pruefeTransaktion(100, 100), 0, "100 - 100 sollte Saldo 0 ergeben");
|
|
|
|
// Nicht genügend Guthaben
|
|
let guthabenErrGefangen = false;
|
|
try {
|
|
pruefeTransaktion(50, 120);
|
|
} catch (err) {
|
|
guthabenErrGefangen = true;
|
|
assert.ok(err instanceof GuthabenFehler, "Überziehung muss GuthabenFehler werfen");
|
|
assert.strictEqual(err.saldo, 50, "GuthabenFehler.saldo muss 50 sein");
|
|
assert.strictEqual(err.betrag, 120, "GuthabenFehler.betrag muss 120 sein");
|
|
}
|
|
assert.ok(guthabenErrGefangen, "pruefeTransaktion bei Saldo < Betrag muss abbrechen");
|
|
|
|
// Negativer oder ungültiger Abhebebetrag
|
|
let ungueltigerBetragGefangen = false;
|
|
try {
|
|
pruefeTransaktion(500, -20);
|
|
} catch (err) {
|
|
ungueltigerBetragGefangen = true;
|
|
assert.ok(err instanceof ValidierungsFehler, "Negativer Betrag muss ValidierungsFehler werfen");
|
|
assert.strictEqual(err.feld, "abhebeBetrag", "Fehlerfeld sollte 'abhebeBetrag' sein");
|
|
}
|
|
assert.ok(ungueltigerBetragGefangen, "Negativer Betrag muss ValidierungsFehler werfen");
|
|
|
|
console.log("✅ Alle Tests in JS 08 (Fehlerbehandlung & Debugging) erfolgreich bestanden!");
|