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.
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).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.
Chai bietet drei Stile für Assertions:
expect(…) und should (lesbar, „natürliche Sprache“)assert(…) (klassisch, funktionsorientiert)
In Bruno ist expect der gebräuchlichste Stil in Beispielen und Doku. assert ist ebenso möglich. should existiert, wird aber selten genutzt.
Gut für verhaltensorientierte Tests, die API-Verhalten in natürlicher Sprache ausdrücken.
test("Status ist 200", () => { expect(res.getStatus()).to.equal(200); }); test("Body enthält erwartete Felder", () => { const body = res.getBody(); expect(body).to.have.property("title"); expect(body).to.have.property("author"); }); test("Liste enthält genau 3 Bücher", () => { const list = res.getBody(); expect(Array.isArray(list)).to.equal(true); expect(list.length).to.equal(3); }); test("Buch entspricht erwarteten Werten", () => { const book = res.getBody(); expect(book).to.eql({ title: "The Winds of Winter", author: "George R R Martin" }); });
Kurz und präzise – beliebt in klassischen Unit-Tests.
test("Status ist 200 (assert)", () => { assert.equal(res.getStatus(), 200); }); test("Body ist Array (assert)", () => { const body = res.getBody(); assert.isArray(body, "Antwort ist kein Array"); assert.equal(body.length, 3, "Erwartete Länge 3"); });
Der should-Stil ist in Chai vorhanden, wird in Bruno aber kaum genutzt.
Falls verwendet, muss er initialisiert werden. Im Unterricht empfehlen wir expect.
Nutze BDD (expect), wenn …
Wenn ich X aufrufe, erwarte ich Y). Nutze TDD (assert), wenn …
assert-Snippets nach Bruno überträgst.
Faustregel: Für Unterricht und API-Tests ist BDD/expect der Standard.
assert eignet sich für Entwickler, die mit TDD vertraut sind.
Header prüfen
test("Content-Type ist JSON", () => { const ct = res.getHeader("content-type"); expect(ct).to.contain("application/json"); });
Teilinhalt prüfen
test("Titel ist nicht leer", () => { const b = res.getBody(); expect(b.title).to.be.a("string").and.not.empty; });
Antwortzeit prüfen
test("Antwort < 800 ms", () => { expect(res.getResponseTime()).to.be.below(800); });
equal vs. eql: Für komplexe Strukturen (Objekte/Arrays) eql oder deep.equal nutzen. Tests vs. Script: Chai ist nur im Tests-Kontext garantiert verfügbar. res.getBody() liefert bei JSON automatisch ein Objekt, sonst einen String.