Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
modul:m450:learningunits:lu08:chaibruno [2025/09/18 09:50] – [LU08c – Chai-Assertions in Bruno (BDD & TDD)] kmaurizimodul:m450:learningunits:lu08:chaibruno [2025/09/18 09:52] (aktuell) – [Weiterführende Links] kmaurizi
Zeile 2: Zeile 2:
  
 <WRAP center round info 60%> <WRAP center round info 60%>
-**Bruno nutzt die [[https://www.chaijs.com/|Chai-Bibliothek]]** – d. h. du kannst dieselbe Syntax wie in Chai für Assertions in deinen Tests verwenden. Zusätzlich bietet Bruno neben JS-Tests auch **deklarative Assertions** im eigenen Reiter.+Bruno nutzt die ''Chai''-Bibliothek – du kannst also dieselbe Syntax wie in Chai für Assertions in deinen Tests verwenden.   
 +Zusätzlich bietet Bruno neben JS-Tests auch **deklarative Assertions** im eigenen Reiter.
 </WRAP> </WRAP>
  
-===== Einordnung: Tests in Bruno =====+===== Tests in Bruno =====
 Bruno kennt zwei Wege für automatische Prüfungen: Bruno kennt zwei Wege für automatische Prüfungen:
-  * **Assertions-Reiter (No-Code/Low-Code):** Bedingungen per Ausdruck/Operator/Wert definieren (z. B. *response.status equals 200*). +  * ''Assertions''-Reiter (No-Code/Low-Code): Bedingungen per Ausdruck/Operator/Wert definieren (z. B. ''response.status equals 200''). 
-  * **Tests (JavaScript):** Frei mit Chai formulieren – ideal für komplexe Logik, Schleifen, dynamische Vergleiche etc.+  * ''Tests'' (JavaScript): Frei mit Chai formulieren – ideal für komplexe Logik, Schleifen, dynamische Vergleiche etc.
  
-Typischer Ablauf: Request ausführen → im Reiter **Tests** oder **Assertions** die Bedingungen definieren → erneut ausführen → Bruno zeigt Pass/Fail pro Bedingung.+Typischer Ablauf: Request ausführen → im Reiter ''Tests'' oder ''Assertions'' die Bedingungen definieren → erneut ausführen → Bruno zeigt ''Pass/Fail'' pro Bedingung.
  
-===== Chai kurz erklärt ===== +===== Chai-Assertion-Stile ===== 
-**Chai** bietet drei Stile für Assertions: +Chai bietet drei Stile für Assertions: 
-  * **BDD:** `expect(...)und `should(lesbare, „natürliche“ Sprache+  * **BDD**: ''expect(...)'' und ''should'' (lesbar, „natürliche Sprache“) 
-  * **TDD:** `assert(...)(klassisch, funktionsorientiert)+  * **TDD**: ''assert(...)'' (klassisch, funktionsorientiert)
  
-In Bruno ist **`expect`** der gebräuchlichste Stil in Beispielen und Doku. `assertist ebenso möglich. `shouldexistiert in Chai, wird in Bruno jedoch seltener verwendet.+In Bruno ist ''expect'' der gebräuchlichste Stil in Beispielen und Doku. ''assert'' ist ebenso möglich. ''should'' existiert, wird aber selten genutzt.
  
 ---- ----
  
-===== BDD-Stil (empfohlen für API-Spezifikationen) ===== +===== BDD-Stil (empfohlen) ===== 
-**Lesbarkeit vor Kürze:** Gut für verhaltensorientierte“ Checks (AntwortstatusStruktur, Werte).+Gut für verhaltensorientierte Testsdie API-Verhalten in natürlicher Sprache ausdrücken.
  
-**Beispiele** 
-**Statuscode** 
 <code javascript> <code javascript>
 test("Status ist 200", () => { test("Status ist 200", () => {
   expect(res.getStatus()).to.equal(200);   expect(res.getStatus()).to.equal(200);
 }); });
-</code> 
  
-**Body-Struktur (Objekt)** 
-<code javascript> 
 test("Body enthält erwartete Felder", () => { test("Body enthält erwartete Felder", () => {
-  const body = res.getBody(); // JSON wird automatisch geparst, falls Content-Type JSON+  const body = res.getBody();
   expect(body).to.have.property("title");   expect(body).to.have.property("title");
   expect(body).to.have.property("author");   expect(body).to.have.property("author");
 }); });
-</code> 
  
-**Array-Länge & Teilmenge** 
-<code javascript> 
 test("Liste enthält genau 3 Bücher", () => { test("Liste enthält genau 3 Bücher", () => {
   const list = res.getBody();   const list = res.getBody();
Zeile 48: Zeile 41:
   expect(list.length).to.equal(3);   expect(list.length).to.equal(3);
 }); });
-</code> 
  
-**Deep Equality (Objekte/Arrays)** +test("Buch entspricht erwarteten Werten", () => {
-<code javascript> +
-test("Buch entspricht dem erwarteten Objekt", () => {+
   const book = res.getBody();   const book = res.getBody();
   expect(book).to.eql({   expect(book).to.eql({
Zeile 60: Zeile 50:
 }); });
 </code> </code>
- 
-> **Tipp:** Für tiefe Vergleiche nutze `eql`/`deep.equal`; für Primitive reicht `equal`. 
  
 ---- ----
  
 ===== TDD-Stil (assert) ===== ===== TDD-Stil (assert) =====
-**Kürze vor Lesbarkeit:** Prägnant, beliebt in Unit-Tests – auch in Bruno nutzbar, wenn du TDD gewohnt bist.+Kurz und präzise – beliebt in klassischen Unit-Tests.
  
-**Beispiele** 
 <code javascript> <code javascript>
 test("Status ist 200 (assert)", () => { test("Status ist 200 (assert)", () => {
Zeile 83: Zeile 70:
 ---- ----
  
-===== should-Stil (optional) ===== +===== ''should''-Stil ===== 
-Der `should`-Stil von Chai existiert, wird in Bruno jedoch nicht aktiv beworbenWenn du ihn verwendestachte darauf, dass er initialisiert ist; in der Praxis empfiehlt sich in Bruno **`expect`**.+Der ''should''-Stil ist in Chai vorhanden, wird in Bruno aber kaum genutzt  
 +Falls verwendetmuss er initialisiert werden. Im Unterricht empfehlen wir ''expect''.
  
 ---- ----
  
-===== BDD vs. TDD – wann was? ===== +===== BDD oder TDD – was wann? ===== 
-**Nutze BDD (`expect`), wenn …** +Nutze **BDD (expect)**, wenn … 
-  * Anforderungen fachlich/lesbar dokumentiert werden sollen (z. B. im UnterrichtReview mit Nicht-Entwicklern). +  * Anforderungen lesbar dokumentiert werden sollen (z. B. im Unterricht oder Review mit Nicht-Entwicklern).   
-  * du API-Verhalten/Szenarien formulierst (Wenn ich X aufrufe, **erwarte** ich Y). +  * API-Verhalten beschrieben wird (''Wenn ich X aufrufe, erwarte ich Y'').   
-  * du deklarative **Assertions** im UI mit wenigen Klicks ergänzen willst (Status, Header, Teilinhalte).+  * deklarative Assertions im UI ergänzt werden.
  
-**Nutze TDD (`assert`), wenn …** +Nutze **TDD (assert)**, wenn … 
-  * du aus Unit-Test-Denke kommst und kurzefunktionale Checks bevorzugst. +  * du sehr präziseknappe Checks bevorzugst.   
-  * du sehr **präzise** Vergleiche und klassische Assertions magst (z. B. `assert.strictEqual`)+  * du Unit-Test-Denke gewohnt bist  
-  * du bestehende TDD-Snippets (aus anderen Projekten) nach Bruno überträgst.+  * bestehende ''assert''-Snippets nach Bruno überträgst.
  
-**Faustregel in Bruno:** Für Unterricht & Teams mit gemischter Erfahrung → **BDD/`expect`** (+ Assertions-Reiter)Für Entwickler-zentrierteknappe Checks → **TDD/`assert`**.+**Faustregel:** Für Unterricht und API-Tests ist ''BDD/expect'' der Standard  
 +''assert'' eignet sich für Entwickler, die mit TDD vertraut sind.
  
 ---- ----
  
-===== Häufige API-Assertions in Bruno (Mini-Rezeptesammlung) =====+===== Häufige Assertions in Bruno =====
 **Header prüfen** **Header prüfen**
 <code javascript> <code javascript>
Zeile 120: Zeile 109:
 </code> </code>
  
-**Antwortzeit (einfacher Leistungs-Check)**+**Antwortzeit prüfen**
 <code javascript> <code javascript>
 test("Antwort < 800 ms", () => { test("Antwort < 800 ms", () => {
Zeile 130: Zeile 119:
  
 ===== Typische Stolpersteine ===== ===== Typische Stolpersteine =====
-  * **`equalvs. `eql`**: Für komplexe Strukturen (Objekte/Arrays) **`eql`/`deep.equal`** nutzen, nicht `equal`+  * ''equal'' vs. ''eql'': Für komplexe Strukturen (Objekte/Arrays) ''eql'' oder ''deep.equal'' nutzen.   
-  * **Kontext Tests“ vs. Script“**: Chai-Hilfen sind im **Tests**-Kontext standardmäßig verfügbar; im **Script**-Kontext kann es je nach Version abweichen → Tests-Tab verwenden+  * Kontext ''Tests'' vs. ''Script'': Chai ist nur im Tests-Kontext garantiert verfügbar.   
-  * **Parsing**`res.getBody()liefert bei JSON-Antworten ein bereits geparstes Objekt (ansonsten String) – prüfe ggf. Content-Type.+  * Parsing: ''res.getBody()'' liefert bei JSON automatisch ein Objekt, sonst einen String.
  
 ---- ----
  
 ===== Weiterführende Links ===== ===== Weiterführende Links =====
-  * **Bruno – Testing (Einführung & Beispiele)**   +  * [[https://docs.usebruno.com/testing/tests/introduction|Bruno Docs: Tests (Chai)]]   
-    – Assertions & `expect(res.getStatus()).to.equal(200)` u. a. +  * [[https://docs.usebruno.com/testing/assertions/introduction|Bruno Docs: Assertions-Reiter]]   
-  * **Bruno – Assertions (No-Code Assertions-Reiter)**   +  * [[https://docs.usebruno.com/testing/script/javascript-reference|Bruno Docs: JavaScript-API (res, bru, expect)]]   
-  * **Bruno – JavaScript/Response-API (z. B. `res.getBody()``getHeader()`)**   +  * [[https://www.chaijs.com/guide/styles/|Chai Assertion Styles (BDD TDD)]]  
-  * **Chai – Assertion-Stile** (BDD `expect`/`should`, TDD `assert`)+
  
 ---- ----
 {{tag>M450-LU08}} {{tag>M450-LU08}}
-[[https://creativecommons.org/licenses/by-nc-sa/4.0/|{{https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png}}]] Marcel Suter (angepasst)+[[https://creativecommons.org/licenses/by-nc-sa/4.0/|{{https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png}}]] Kevin Maurizi
  
  • modul/m450/learningunits/lu08/chaibruno.1758181812.txt.gz
  • Zuletzt geändert: 2025/09/18 09:50
  • von kmaurizi