Este documento define el alcance, profundidad y criterios de calidad de los tests del scaffolder.
Estado: 📝 Borrador inicial
Fecha: 2026-06-28
Objetivo: Asegurar que el scaffolder genera proyectos correctos y que el CLI funciona como se espera.
- El CLI (
src/cli.ts,src/parse-args.ts) - La copia de template (
src/copy-template.ts) - La generación completa de un proyecto (integración)
- Validaciones de entrada (nombres de proyecto, flags)
- El template generado (eso ya se valida manualmente al generar
my-test-app) - Comportamiento de OpenClaw / prompts (eso es del proyecto generado)
- Performance del scaffolder
Objetivo: Validar la lógica de parsing de argumentos y mensajes de error.
Casos a cubrir:
create-stack-next mi-app→ usa defaults (--git,--install,npm)create-stack-next mi-app --no-git→ no inicializa gitcreate-stack-next mi-app --no-install→ no corre npm installcreate-stack-next mi-app --package-manager pnpm→ usa pnpm- Nombre inválido:
MiApp(mayúsculas)mi app(espacios)mi-app!(caracteres especiales)node_modules(nombre reservado)
- Sin argumento → muestra usage y sale con código 1
Archivo: src/test/cli.test.ts
Objetivo: Validar que los archivos se copian correctamente y que los placeholders se reemplazan.
Casos a cubrir:
- Copia todos los archivos del template
- Reemplaza
{{PROJECT_NAME}}enpackage.json,README.md, etc. - Reemplaza
{{PM}}según el package manager elegido - Maneja correctamente paths anidados
- No copia archivos que deberían ignorarse (si aplica)
Archivo: src/test/copy-template.test.ts
Objetivo: Validar que un proyecto generado pasa todos los checks de calidad.
Flujo:
- Generar un proyecto en una carpeta temporal (
my-test-app) - Entrar a la carpeta
- Correr:
npm run lintnpm run typechecknpm run test:runnpm run build
- Verificar que todos pasan sin errores
Archivo: src/test/integration.test.ts
- El directorio destino ya existe y no está vacío → debe fallar con mensaje claro
- Node.js < 20 → debe mostrar mensaje de versión mínima y salir
- Error durante
npm install→ debe reportar el error correctamente
Un test suite se considera suficiente cuando:
- Cubre los paths principales del CLI (flags por defecto + combinaciones comunes)
- Cubre los casos de error más probables (nombre inválido, directorio existente)
- La generación completa (
integration) pasalint,typecheck,test:runybuild - Los tests corren en menos de 60 segundos en CI
- Los tests usan carpetas temporales y no dejan basura
- Runner: Vitest (ya está como devDependency)
- Temporales: Usar
os.tmpdir()+ nombres únicos - Ejecución del CLI: Usar
node ./dist/index.js(después de build) o compilar en memoria - Assertions:
expectde Vitest +fs.existsSync,fs.readFileSync - Cleanup: Borrar las carpetas temporales después de cada test (o usar
afterAll)
cli.test.ts(parsing + validaciones)copy-template.test.ts(reemplazo de placeholders)integration.test.ts(generación completa + checks)- Edge cases (directorio existente, Node version)
- Aprobar este spec
- Implementar
cli.test.ts - Implementar
copy-template.test.ts - Implementar
integration.test.ts - Agregar a CI (GitHub Actions)
Nota: Este spec es vivo. Se puede ajustar durante la implementación si aparecen casos que no estaban contemplados.