Saltar al contenido principal

Probar tu integración

No toques nunca la clave real​

Apunta PSEUDONYM_HOME a una carpeta temporal nueva antes de que tus tests llamen a la librería. Cada carpeta tiene su propia clave y su propio directorio. Con node:test (cualquier ejecutor de tests funciona igual):

import { mkdtempSync } from "node:fs";
import { tmpdir } from "node:os";
import path from "node:path";
import { beforeEach } from "node:test";

beforeEach(() => {
process.env.PSEUDONYM_HOME = mkdtempSync(path.join(tmpdir(), "pseudonym-"));
});

La librería lee PSEUDONYM_HOME en cada llamada, así que basta con definirla en beforeEach. Los procesos hijos que lances también la necesitan en su entorno.

No compruebes alias fijos​

Cada carpeta temporal tiene una clave aleatoria nueva, así que los alias cambian de una ejecución a otra. Comprueba su forma, o compara dos llamadas:

const ALIAS = /^A-[0-9A-HJKMNP-TV-Z]{6,12}$/;

const [a] = await remember([person]);
assert.match(a, ALIAS);
assert.equal(await remember(person), a); // stable within the same folder

Comprueba que no se filtra nada personal​

La prueba más útil de una integración: llama a tus herramientas y comprueba que ningún valor personal de tus datos de prueba aparece en su salida.

const personal = students.flatMap((s) => [s.fullName, s.email, s.studentNumber, String(s.id)]);

const output = await callTool("list_students");
for (const value of personal) assert.ok(!output.includes(value), `leaked: ${value}`);

Usa datos inventados en los datos de prueba: nombres inventados y dominios como example.test o example-school.test.

Prueba el camino de vuelta​

En las herramientas de escritura, comprueba que un alias obtenido de una herramienta se resuelve en el registro correcto, y que un alias desconocido produce un error legible:

const [{ student }] = JSON.parse(await callTool("list_students"));
await callTool("grade_student", { student, grade: 6 });
assert.equal(gradebook.get(students[0].id), 6);

const result = await callTool("grade_student", { student: "A-000000", grade: 5 });
assert.equal(result.isError, true);

El test del ejemplo del aula hace todo esto a través de MCP, con un cliente dentro del mismo proceso.