Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| 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)] kmaurizi | modul: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:// | + | Bruno nutzt die '' |
| + | Zusätzlich bietet Bruno neben JS-Tests auch **deklarative Assertions** im eigenen Reiter. | ||
| </ | </ | ||
| - | ===== Einordnung: | + | ===== 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/ | + | * '' |
| - | * **Tests (JavaScript): | + | * '' |
| - | > Typischer Ablauf: Request ausführen → im Reiter | + | Typischer Ablauf: Request ausführen → im Reiter |
| - | ===== 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“ | + | * **BDD**: '' |
| - | * **TDD:** `assert(...)` (klassisch, funktionsorientiert) | + | * **TDD**: '' |
| - | In Bruno ist **`expect`** der gebräuchlichste Stil in Beispielen und Doku. `assert` ist ebenso möglich. | + | In Bruno ist '' |
| ---- | ---- | ||
| - | ===== BDD-Stil (empfohlen | + | ===== BDD-Stil (empfohlen) ===== |
| - | **Lesbarkeit vor Kürze: | + | Gut für verhaltensorientierte |
| - | **Beispiele** | ||
| - | **Statuscode** | ||
| <code javascript> | <code javascript> | ||
| test(" | test(" | ||
| expect(res.getStatus()).to.equal(200); | expect(res.getStatus()).to.equal(200); | ||
| }); | }); | ||
| - | </ | ||
| - | **Body-Struktur (Objekt)** | ||
| - | <code javascript> | ||
| test(" | test(" | ||
| - | const body = res.getBody(); | + | const body = res.getBody(); |
| expect(body).to.have.property(" | expect(body).to.have.property(" | ||
| expect(body).to.have.property(" | expect(body).to.have.property(" | ||
| }); | }); | ||
| - | </ | ||
| - | **Array-Länge & Teilmenge** | ||
| - | <code javascript> | ||
| test(" | test(" | ||
| const list = res.getBody(); | const list = res.getBody(); | ||
| Zeile 48: | Zeile 41: | ||
| expect(list.length).to.equal(3); | expect(list.length).to.equal(3); | ||
| }); | }); | ||
| - | </ | ||
| - | **Deep Equality (Objekte/ | + | test(" |
| - | <code javascript> | + | |
| - | test(" | + | |
| const book = res.getBody(); | const book = res.getBody(); | ||
| expect(book).to.eql({ | expect(book).to.eql({ | ||
| Zeile 60: | Zeile 50: | ||
| }); | }); | ||
| </ | </ | ||
| - | |||
| - | > **Tipp:** Für tiefe Vergleiche nutze `eql`/ | ||
| ---- | ---- | ||
| ===== TDD-Stil (assert) ===== | ===== TDD-Stil (assert) ===== | ||
| - | **Kürze vor Lesbarkeit: | + | Kurz und präzise – beliebt in klassischen |
| - | **Beispiele** | ||
| <code javascript> | <code javascript> | ||
| test(" | test(" | ||
| Zeile 83: | Zeile 70: | ||
| ---- | ---- | ||
| - | ===== „should“-Stil (optional) | + | ===== '' |
| - | Der `should`-Stil von Chai existiert, wird in Bruno jedoch nicht aktiv beworben. Wenn du ihn verwendest, achte darauf, dass er initialisiert | + | Der '' |
| + | Falls verwendet, muss er initialisiert | ||
| ---- | ---- | ||
| - | ===== BDD vs. TDD – wann was? ===== | + | ===== BDD oder TDD – was wann? ===== |
| - | **Nutze BDD (`expect`), wenn …** | + | Nutze **BDD (expect)**, wenn … |
| - | * Anforderungen | + | * Anforderungen lesbar dokumentiert werden sollen (z. B. im Unterricht |
| - | * du API-Verhalten/Szenarien formulierst | + | * API-Verhalten |
| - | * du deklarative | + | * deklarative Assertions im UI ergänzt werden. |
| - | **Nutze TDD (`assert`), wenn …** | + | Nutze **TDD (assert)**, wenn … |
| - | * du aus Unit-Test-Denke kommst und kurze, funktionale | + | * du sehr präzise, knappe |
| - | * du sehr **präzise** Vergleiche und klassische Assertions magst (z. B. `assert.strictEqual`). | + | * du Unit-Test-Denke gewohnt bist. |
| - | * du bestehende | + | * bestehende |
| - | > **Faustregel | + | **Faustregel: |
| + | '' | ||
| ---- | ---- | ||
| - | ===== Häufige | + | ===== Häufige Assertions in Bruno ===== |
| **Header prüfen** | **Header prüfen** | ||
| <code javascript> | <code javascript> | ||
| Zeile 120: | Zeile 109: | ||
| </ | </ | ||
| - | **Antwortzeit | + | **Antwortzeit |
| <code javascript> | <code javascript> | ||
| test(" | test(" | ||
| Zeile 130: | Zeile 119: | ||
| ===== Typische Stolpersteine ===== | ===== Typische Stolpersteine ===== | ||
| - | * **`equal` vs. `eql`**: Für komplexe Strukturen (Objekte/ | + | * '' |
| - | | + | * Kontext |
| - | | + | * Parsing: |
| ---- | ---- | ||
| ===== Weiterführende Links ===== | ===== Weiterführende Links ===== | ||
| - | * **Bruno – Testing | + | * [[https:// |
| - | – Assertions & `expect(res.getStatus()).to.equal(200)` u. a. | + | * [[https:// |
| - | * **Bruno – Assertions (No-Code | + | * [[https:// |
| - | * **Bruno – JavaScript/Response-API (z. B. `res.getBody()`, `getHeader()`)** | + | * [[https:// |
| - | * **Chai – Assertion-Stile** | + | |
| ---- | ---- | ||
| {{tag> | {{tag> | ||
| - | [[https:// | + | [[https:// |