tests/) sin exigir que el // proyecto declare autoload-dev en su composer.json. spl_autoload_register(function (string $class): void { if (!str_starts_with($class, 'Tests\\')) { return; } $file = __DIR__ . '/' . str_replace('\\', '/', substr($class, 6)) . '.php'; if (is_file($file)) { require_once $file; } }); // ============================================ // IMPORTANT: Definir constantes ANTES de cargar config.php // para sobreescribir la configuración para definir una // base de datos para sólo los test // ============================================ define('DB_TYPE', 'sqlite'); define('DB_HOST', 'localhost'); define('DB_NAME', ':memory:'); define('DB_USER', ''); define('DB_PASS', ''); // Incluir config.php con el autoloader @require_once __DIR__ . '/../autoload.php'; // El ledger de migraciones (Commands\Migration) necesita el directorio. if (!is_dir(ROOT_DIR . '/migrations')) { mkdir(ROOT_DIR . '/migrations', 0777, true); } // Router autoload Loader::load(ROOT_CORE . '/Routers/'); // Other autoloads Loader::load(ROOT_CORE . '/Autoloads/'); // Stubs de header()/setcookie() por namespace require_once __DIR__ . '/Support/http_stubs.php';