Scripts & tests

Scripts QuickJS

Le moteur embarqué, l’API zapi, preRequest, zapi.fetch et l’auth chaining.

# Moteur embarqué

Les scripts tournent dans QuickJS via Rust. L’app desktop et la CLI utilisent le même moteur, les mêmes helpers et le même budget de timeout — un test qui passe en local passe en CI.

APIDisponibleRôle
zapi.setVar(k, v)PartoutÉcrit une variable runtime.
zapi.getVar(k)PartoutLit collection, env ou runtime.
zapi.hasVar(k)PartoutTeste la présence d’une variable.
zapi.fetch(url, opts)PartoutExécute une vraie requête HTTP.
console.log / warn / errorPartoutCapture des logs dans le panneau.
reqPartoutRequête résolue en cours.
resTestsRéponse HTTP et JSON parsé.
test(), expect()TestsAssertions et résultats du runner.

# Auth chaining

preRequest
// preRequest — login puis propagation du token
const login = zapi.fetch(zapi.getVar("baseUrl") + "/auth/login", {
  method: "POST",
  headers: { "content-type": "application/json" },
  body: {
    email: zapi.getVar("email"),
    password: "{{secret:API_PASSWORD}}"
  }
});

if (!login.ok) throw new Error("auth impossible: " + login.status);

zapi.setVar("token", login.json.accessToken);
console.log("token reçu:", login.json.accessToken.slice(0, 8) + "…");

zapi.fetch() renvoie { status, ok, headers, body, json }. Un body objet est automatiquement envoyé en JSON.

# Placement dans le YAML

scripts dans une requête
scripts:
  preRequest: |
    zapi.setVar("startedAt", Date.now())
  tests: |
    test("status", () => expect(res.status).toBe(200))
    test("temps", () => expect(res.durationMs).toBeLessThan(1000))