Aller au contenu principal
Version: 1.0.0

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.

batch.test.mjs
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.

JavaScriptPython
assertRunSucceededassert_run_succeeded
assertRunRefusedassert_run_refused
assertTraceEventsassert_trace_events
createScriptedDecisionProvidercreate_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.