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:// |