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.