Documentation Index
Fetch the complete documentation index at: https://docs.jelou.ai/llms.txt
Use this file to discover all available pages before exploring further.
Configuração
Importe os utilitários de teste de @jelou/functions/testing:
import {
createMockContext,
createMockCronContext,
createMockEventContext,
createMockRequest,
createMockPlatformRequest,
createMockJelouClient,
createMockMemoryClient,
} from "@jelou/functions/testing";
createMockContext(overrides?)
Cria um contexto com valores padrão sensatos para testes.
const ctx = createMockContext();
const ctx2 = createMockContext({
company: { id: 42, name: "Loja ABC" },
user: { id: 99, names: "Maria Garcia" },
bot: { id: "bot-123", name: "Bot de Suporte", channel: "whatsapp" },
});
createMockCronContext(expression, overrides?, cronName?)
Cria um contexto com isCron: true e trigger.type: "cron".
const ctx = createMockCronContext("0 9 * * *");
// ctx.isCron === true
// ctx.trigger === { type: "cron", cron: "0 9 * * *" }
const ctx2 = createMockCronContext("0 9 * * *", {}, "lembrete-diario");
// ctx2.trigger.cronName === "lembrete-diario"
createMockEventContext(eventName, overrides?)
Cria um contexto com isEvent: true e trigger.type: "event".
const ctx = createMockEventContext("payment.completed");
// ctx.isEvent === true
createMockRequest(body?, options?)
Cria um objeto Web Request padrão.
const req = createMockRequest();
// GET http://localhost:8000/
const req2 = createMockRequest({ telefone: "5511987654321" });
// POST com body JSON
createMockPlatformRequest(token, body?, options?)
Cria um Request com header X-Jelou-Token. Útil para testar funções autenticadas com runtime tokens.
const req = createMockPlatformRequest("jfn_rt_test123");
// GET com X-Jelou-Token: jfn_rt_test123
const req2 = createMockPlatformRequest("jfn_rt_test123", { query: "test" });
// POST com body JSON + X-Jelou-Token
createMockJelouClient(options?)
Cria um mock do cliente de mensagens com gravação de chamadas.
const mockJelou = createMockJelouClient();
const ctx = createMockContext({ jelou: mockJelou });
await ctx.jelou.send({ type: "text", to: "+5511987654321", text: "Olá" });
mockJelou.calls.length; // 1
mockJelou.calls[0].method; // "send"
mockJelou.calls[0].args.type; // "text"
Resultados personalizados
const mockJelou = createMockJelouClient({
sendResult: { messageId: "msg-custom-123" },
templateResult: [{ id: "tmpl-1", destination: "+5511987654321" }],
});
Reset entre testes
createMockMemoryClient(options?)
Cria um mock do cliente de memória com store in-memory.
const mockMemory = createMockMemoryClient({
store: { passo: "inicio", tentativas: 0 },
});
const ctx = createMockContext({ memory: mockMemory });
const passo = await ctx.memory.get("passo", "desconhecido"); // "inicio"
await ctx.memory.set("passo", "confirmacao", 3600);
Reset entre testes
Exemplo completo
import { assertEquals } from "jsr:@std/assert";
import { define, z } from "@jelou/functions";
import {
createMockContext,
createMockCronContext,
createMockRequest,
createMockPlatformRequest,
createMockJelouClient,
} from "@jelou/functions/testing";
const fn = define({
name: "consultar-cliente",
description: "Busca informações do cliente por telefone",
input: z.object({ telefone: z.string().min(10) }),
handler: async (input, ctx) => ({
nome: "Maria Garcia",
plano: "Premium",
companyId: ctx.company.id,
}),
});
Deno.test("retorna info do cliente com company ID correto", async () => {
const ctx = createMockContext({ company: { id: 42, name: "Loja ABC" } });
const req = createMockRequest({ telefone: "5511987654321" });
const result = await fn.handler({ telefone: "5511987654321" }, ctx, req);
assertEquals(result.companyId, 42);
});
Deno.test("mock de mensagens grava chamadas", async () => {
const mockJelou = createMockJelouClient();
const ctx = createMockContext({ jelou: mockJelou });
await ctx.jelou.send({ type: "text", to: "+5511987654321", text: "Olá" });
assertEquals(mockJelou.calls.length, 1);
assertEquals(mockJelou.calls[0].args.type, "text");
});
Deno.test("platform request inclui header de token", () => {
const req = createMockPlatformRequest("jfn_rt_test123", { action: "test" });
assertEquals(req.headers.get("x-jelou-token"), "jfn_rt_test123");
});
Cria um EdgeApp mock para testes de funções multi-tool.
import { createMockApp, createMockContext, createMockRequest } from "@jelou/functions/testing";
import { define, z } from "@jelou/functions";
const myApp = createMockApp({
enviarEmail: define({
description: "Envia um e-mail",
input: z.object({ to: z.string() }),
handler: async () => ({ sent: true }),
}),
});
Deno.test("app tem os tools corretos", () => {
assertEquals(Object.keys(myApp.tools), ["enviarEmail"]);
});
Execute os testes com Deno: