-
Notifications
You must be signed in to change notification settings - Fork 0
Testing ES
Technomantus Corvi edited this page Sep 5, 2026
·
1 revision
sudo apt update
sudo apt install php8.1 php8.1-cli php8.1-mysql php8.1-xml php8.1-mbstring php8.1-curl php8.1-zip unzip| Paquete | Por qué |
|---|---|
php8.1-mysql |
Driver PDO (Database::connect()) |
php8.1-xml |
dom/xmlwriter, necesarios para los reportes de PHPUnit |
php8.1-mbstring, php8.1-curl, php8.1-zip
|
Necesarios para Composer |
Usa php8.1-pgsql en vez de (o junto a) php8.1-mysql para PostgreSQL.
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composerPHP 8.1 requiere PHPUnit 10.x (11+ deja de soportar 8.1):
composer init --name="tu-usuario/tanuki-base" --type=project --no-interaction
composer require --dev "phpunit/phpunit:^10.5"phpunit.xml:
<?xml version="1.0" encoding="UTF-8"?>
<phpunit bootstrap="tests/bootstrap.php" colors="true">
<testsuites>
<testsuite name="Unit"><directory>tests/Unit</directory></testsuite>
<testsuite name="Feature"><directory>tests/Feature</directory></testsuite>
</testsuites>
</phpunit>tests/bootstrap.php:
<?php
require_once __DIR__ . '/../vendor/autoload.php';
require_once __DIR__ . '/../utils.php';
require_once __DIR__ . '/../config/database.php';
require_once __DIR__ . '/../core/Model.php';
require_once __DIR__ . '/../core/Request.php';
require_once __DIR__ . '/../core/Controller.php';
$envFile = file_exists(__DIR__ . '/../.env.testing')
? __DIR__ . '/../.env.testing'
: __DIR__ . '/../.env';
if (file_exists($envFile)) {
foreach (file($envFile, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES) as $line) {
$line = trim($line);
if ($line === '' || $line[0] === '#' || !str_contains($line, '=')) continue;
[$key, $value] = explode('=', $line, 2);
$_ENV[trim($key)] = trim($value, " \t\"'");
}
}.env.testing (nunca lo subas — apunta a una base de datos desechable):
APP_ENV=testing
DB_DRIVER=mysql
DB_HOST=localhost
DB_NAME=tanuki_db
DB_USER=tu_usuario_test
DB_PASS=tu_password_testConsidera usar
DB_DRIVER=sqliteaquí en su lugar — no necesita ningún servicio corriendo, lo que simplifica mucho el CI.
./vendor/bin/phpunit # todo
./vendor/bin/phpunit --testsuite Unit # no requiere base de datos
./vendor/bin/phpunit --testsuite Feature # requiere la BD de test
./vendor/bin/phpunit tests/Feature/TodoModelTest.php- Los tests Unit nunca tocan base de datos. Los Feature sí, contra la BD de test real.
-
setUp()vacía la tabla correspondiente antes de cada test para aislarlos; considerabeginTransaction()/rollBack()según crezca la suite. - Añade un test de regresión por cada bug sutil que arregles — la propia suite del framework incluye tests para el bug del valor falsy en
env()y el fix de inyección SQL por nombre de columna como ejemplos de este patrón.