# Testes, doctor e conformance > Uma entrada de checks para o App — doctor reúne versões, lockfiles, manifestos, cache de docs e conformance — e o que cada prova cobre (e não cobre). ## Uma entrada de checks ```bash npm run check npm run build --prefix frontend ``` No scaffold, `check` executa `create-central-oon doctor`, que inclui: - mesma versão instalada de backend, frontend e gerador, e correspondência entre `package.json` e lockfile; - lockfiles npm v2/v3 separados, ou lock único de workspace com backend/frontend declarados; - App manifest, manifestos opcionais de domínio/processo e conformidade; - cache oficial `.ooncore/` e hashes (corrija com `npm run ooncore:docs`); - módulos TS/ESM não autocarregáveis, sintaxe CommonJS e imports relativos de diretórios de autoload que escapam de `backend/`; - indicação de `cwd` e mapeamento `/api` público para a rota interna. A saída JSON contém códigos e caminhos e retorna exit code 1 quando há pendências. > [!NOTE] > Doctor **não** executa código do App, não resolve imports dinâmicos, não prova configurações de proxy modificadas e não substitui HTTP autenticado nem validação da imagem. Em Apps anteriores, troque o script `check` por `create-central-oon doctor` — ele já inclui docs check e conformance; não duplique no CI. ## Conformance ```bash npm run ooncore:conformance npx create-central-oon conformance --json ``` Verifica: `central.app.json` válido, `main.tsx` com `startOonApp`, fronteira de `central.config.js`, ausência de patch de Mongoose, de código remoto/`eval` e de segredos no bundle, guards ligados, imports só de subpaths públicos, dependências `file:` dentro de `frontend/`, extensões de arquivo permitidas e segurança do runtime local. A lista de códigos está em [Fronteira de segurança local](/docs/seguranca/fronteira-local#o-que-a-conformance-reprova). ## Testes do App O scaffold neutro **não** cria `npm test` na raiz. Quando existir, `scripts.test` na raiz é o ponto de entrada da suíte e orquestra os componentes; sem ele, o executor de publicação roda os testes declarados em backend e frontend. Os testes na publicação usam dependências instaladas **sem lifecycle scripts**, em contêiner **sem credenciais e sem rede**. Testes que exigem serviços externos precisam ser compatibilizados. Prove a jornada: - acesso permitido e recusado (admin × viewer); - validação de entrada (422); - resultado e persistência (recarregar); - erros com `code`. ### Dublês de capabilities - PDF: `capabilities.configurePdfRendering` com transport fake que devolve bytes `%PDF-`. - E-mail: substitua a fronteira externa; nunca envie e-mail real. - Processo: `drainProcessJobs()` para recálculos determinísticos. - Front: `createOonTestConfig()` de `@oondemand/oon-core-front/testing`. ```ts import { createOonTestConfig } from "@oondemand/oon-core-front/testing"; const config = createOonTestConfig({ routes: [{ path: "/", element: }] }); ``` ## Estados distintos | Estado | Prova | |---|---| | Implementado | Código e testes locais | | Build aprovado | `npm run check` + build | | Publicado | Release aceita e imagem validada em Dev | | Homologado | Jornada provada no endereço autenticado de Dev/HML | Relate cada um separadamente. Fonte: https://sdk.oonapps.com/docs/operacao/testes-e-conformance