LU08c – Chai-Assertions in Bruno (BDD & TDD)

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.

Tests in Bruno

Bruno kennt zwei Wege für automatische Prüfungen:

Typischer Ablauf: Request ausführen → im Reiter Tests oder Assertions die Bedingungen definieren → erneut ausführen → Bruno zeigt Pass/Fail pro Bedingung.

Chai-Assertion-Stile

Chai bietet drei Stile für Assertions:

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)

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"
  });
});

TDD-Stil (assert)

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");
});

''should''-Stil

Der should-Stil ist in Chai vorhanden, wird in Bruno aber kaum genutzt. Falls verwendet, muss er initialisiert werden. Im Unterricht empfehlen wir expect.


BDD oder TDD – was wann?

Nutze BDD (expect), wenn …

Nutze TDD (assert), wenn …

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 Assertions in Bruno

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);
});

Typische Stolpersteine



Kevin Maurizi