Tester un programme Touba
Testez séparément le résultat métier, le respect de l'autorité et les effets observés. Un run refusé peut valider un contrôle de sécurité sans avoir réussi la tâche métier.
Démarrer sans modèle
Installez le SDK JavaScript avec la distribution Touba, puis
reprenez le fichier batch.tb du
tutoriel de traitement parallèle.
Le test ci-dessous exécute ce programme avec la CLI installée.
import test from "node:test";
import { ToubaEngine } from "@touba/sdk";
import { assertRunSucceeded, assertRunRefused } from "@touba/sdk/testing";
const engine = new ToubaEngine({ projectRoot: process.cwd() });
const options = {
source: "batch.tb",
entryRef: "strategy:examples.parallel_batch/Run",
};
test("preserves input order and handles an empty batch", async () => {
assertRunSucceeded(
await engine.run({ ...options, inputs: { tickets: ["T-3", "T-1"] } }),
["Ticket: T-3", "Ticket: T-1"],
);
assertRunSucceeded(
await engine.run({ ...options, inputs: { tickets: [] } }),
[],
);
});
test("refuses a batch above the declared limit", async () => {
await assertRunRefused(
() => engine.run({ ...options, inputs: { tickets: Array(9).fill("T") } }),
"ParallelItemLimitExceeded",
);
});
Lancez node --test batch.test.mjs depuis ce dossier. Aucun handler, réseau
ou modèle n'est nécessaire. Un échec de compilation ou de lancement ne peut
pas satisfaire assertRunRefused : cette assertion exige un refus runtime
avec le code exact.
Avec des agents et des tools
Le sous-module @touba/sdk/testing fournit aussi
createScriptedDecisionProvider et assertTraceEvents.
Un provider scripté fixe les propositions du modèle pour tester un flux de
manière déterministe ; il ne remplace ni les contrôles du runtime, ni les
tests avec un modèle réel. Vérifiez ses attentes et appelez
assertConsumed() pour repérer un scénario partiellement exécuté.
Un événement de trace ne prouve pas à lui seul l'effet chez un fournisseur. Avec un handler, observez également le fichier, la ligne de base ou le reçu produit dans un environnement de test isolé.
Équivalents Python
Le SDK Python fournit les mêmes aides dans touba_sdk.testing.
Les scénarios, les contrats Touba et les codes attendus restent identiques.
| JavaScript | Python |
|---|---|
assertRunSucceeded | assert_run_succeeded |
assertRunRefused | assert_run_refused |
assertTraceEvents | assert_trace_events |
createScriptedDecisionProvider | create_scripted_decision_provider |
provider.assertConsumed() | provider.assert_consumed() |
Cas à couvrir
- résultat exact et types d'entrée/sortie ;
- collection vide, borne atteinte et dépassement ;
- capacité non déclarée et caller non autorisé ;
- approbation refusée, expirée ou rejouée ;
- pause/reprise sans répétition d'un effet déjà confirmé ;
- exécutions concurrentes avec budgets partagés.
Le guide SDK détaille les quatre aides de test. Les diagnostics donnent les codes à vérifier.