it-praxisportal/courses/javascript/03_funktionen_und_scope/test_aufgabe.js

44 lines
2.4 KiB
JavaScript

// 🧪 Testsuite: JS 03 - Funktionen, Scope & Closures
// Test 1: erstelleZaehler (Standardwert 0)
const z1 = erstelleZaehler();
assert.strictEqual(z1(), 1, "Erster Aufruf von erstelleZaehler() sollte 1 zurückgeben");
assert.strictEqual(z1(), 2, "Zweiter Aufruf von erstelleZaehler() sollte 2 zurückgeben");
assert.strictEqual(z1(), 3, "Dritter Aufruf von erstelleZaehler() sollte 3 zurückgeben");
// Test 1b: erstelleZaehler mit Startwert 10
const z2 = erstelleZaehler(10);
assert.strictEqual(z2(), 11, "Erster Aufruf von erstelleZaehler(10) sollte 11 zurückgeben");
assert.strictEqual(z2(), 12, "Zweiter Aufruf von erstelleZaehler(10) sollte 12 zurückgeben");
// Test 1c: Closure-Isolation (z1 und z2 dürfen sich nicht gegenseitig beeinflussen)
assert.strictEqual(z1(), 4, "z1 sollte unabhängig von z2 weiterzählen (erwartet: 4)");
// Test 2: multiplizierer
const verdopple = multiplizierer(2);
assert.strictEqual(verdopple(5), 10, "verdopple(5) sollte 10 sein");
assert.strictEqual(verdopple(0), 0, "verdopple(0) sollte 0 sein");
assert.strictEqual(verdopple(-4), -8, "verdopple(-4) sollte -8 sein");
const verdreifache = multiplizierer(3);
assert.strictEqual(verdreifache(4), 12, "verdreifache(4) sollte 12 sein");
const halbiere = multiplizierer(0.5);
assert.strictEqual(halbiere(20), 10, "halbiere(20) sollte 10 sein");
// Test 3: summiereAlles (Rest-Parameter)
assert.strictEqual(summiereAlles(), 0, "summiereAlles() ohne Argumente sollte 0 sein");
assert.strictEqual(summiereAlles(42), 42, "summiereAlles(42) sollte 42 sein");
assert.strictEqual(summiereAlles(1, 2, 3, 4, 5), 15, "summiereAlles(1, 2, 3, 4, 5) sollte 15 sein");
assert.strictEqual(summiereAlles(10, -5, 3), 8, "summiereAlles(10, -5, 3) sollte 8 sein");
// Test 4: erstellePraefixierer
const mitEuro = erstellePraefixierer("€ ");
assert.strictEqual(mitEuro("100"), "€ 100", "mitEuro('100') sollte '€ 100' sein");
assert.strictEqual(mitEuro("0"), "€ 0", "mitEuro('0') sollte '€ 0' sein");
const mitHttps = erstellePraefixierer("https://");
assert.strictEqual(mitHttps("github.com"), "https://github.com", "mitHttps('github.com') sollte 'https://github.com' sein");
assert.strictEqual(mitHttps("developer.mozilla.org"), "https://developer.mozilla.org", "mitHttps('developer.mozilla.org') sollte 'https://developer.mozilla.org' sein");
console.log("✅ Alle 18 JavaScript Tests in JS 03 erfolgreich bestanden!");