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.
| API | Disponible | Rôle |
|---|---|---|
zapi.setVar(k, v) | Partout | Écrit une variable runtime. |
zapi.getVar(k) | Partout | Lit collection, env ou runtime. |
zapi.hasVar(k) | Partout | Teste la présence d’une variable. |
zapi.fetch(url, opts) | Partout | Exécute une vraie requête HTTP. |
console.log / warn / error | Partout | Capture des logs dans le panneau. |
req | Partout | Requête résolue en cours. |
res | Tests | Réponse HTTP et JSON parsé. |
test(), expect() | Tests | Assertions et résultats du runner. |
# Auth chaining
// 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:
preRequest: |
zapi.setVar("startedAt", Date.now())
tests: |
test("status", () => expect(res.status).toBe(200))
test("temps", () => expect(res.durationMs).toBeLessThan(1000))