Qué es codeception, cómo instalarlo y cómo utilizarlo?
En la mayoría de los casos los test no aseguran que tu aplicación funcione al 100% como debe funcionar. Es imposible predecir todos los escenarios posibles, más cuando se trata de aplicaciones complejas. Sin embargo, los test pueden cubrir las partes más importantes y sensibles de una aplicación y al menos probar que funciona como se predijo.
Codeception es un framework de testing que se diferencia de los demás en los niveles que utiliza para probar tu aplicación (además depende de PHPUnit y Behat). En Codeception se pueden crear test de Aceptación, funcionales y unitarios.
Tipos de Tests
Vemos los paradigmas que utiliza codeceptions para los tests.
Tests de Aceptación
Los tests de aceptación prueban cómo un usuario final, cliente o persona no técnica utiliza una aplicación y espera a que se comporte de una determinada forma. Esta persona no tiene idea del framework, base de datos, servidor web o lenguaje de programación que fue utilizado para crear dicha aplicación, ni por qué no funciona cómo se espera.
Estos tests comprende complejos escenarios desde la perspectiva del usuario iniciando una sesión por el navegador, dando clic en un botón, llenando un formulario, etc. Ejemplo:
$I = new AcceptanceTester($scenario);
$I->amOnPage('/');
$I->click('Sign Up');
$I->submitForm('#signup', ['username' => 'MilesDavis', 'email' => '[email protected]']);
$I->see('Thank you for Signing Up!');
Tests Funcionales
Estos tests son realizados sin necesidad de correr un servidor. De acuerdo a esto, tenemos la posibilidad de ver directamente los errores o excepciones de la aplicación, los tests se ejecutan rápido, podemos ver data en la base de datos, etc.
Con los tests funcionales, puedes evaluar la data que retorna una respuesta HTML, la data que se guarda en la base de datos, si un email fue enviado o no, etc. Ejemplo:
$I = new FunctionalTester($scenario);
$I->amOnPage('/');
$I->click('Sign Up');
$I->submitForm('#signup', ['username' => 'MilesDavis', 'email' => '[email protected]']);
$I->see('Thank you for Signing Up!');
$I->seeEmailSent('[email protected]', 'Thank you for registration');
$I->seeInDatabase('users', ['email' => '[email protected]']);
Tests Unitarios
Los tests unitarios prueban las piezas de código aisladas. Algunas partes del código no siempre pueden ser del todo cubiertas con los otros dos tipos de tests vistos. Si puedes hacer tests unitarios pruebas en parte que tú código está bajamente acoplado y que es testeable.
function testSavingUser()
{
$user = new User();
$user->setName('Miles');
$user->setSurname('Davis');
$user->save();
$this->assertEquals('Miles Davis', $user->getFullName());
$this->unitTester->seeInDatabase('users', ['name' => 'Miles', 'surname' => 'Davis']);
}
Instalación
composer require --dev codeception/codeception
php vendor/bin/codecept bootstrap
vendor/bin/codecept generate:cept acceptance HomePage
En Laravel podemos ejecutar el siguiente comando para iniciar un servidor PHP.
Iniciar un server en PHP
user$ php -S localhost:8888
[Thu May 26 16:24:31 2022] PHP 7.4.29 Development Server (http://localhost:8888) started
Iniciar un server en Laravel
user$ php artisan serve
Starting Laravel development server: http://127.0.0.1:8000
Creación del primer test
La URL en donde esté corriendo tu servidor deberás configurarla en el archivo acceptance.suite.yml.
$I = new AcceptanceTester($scenario);
$I->wantTo('verify that the homepage is working on');
$I->amOnPage('/');
$I->see('My Blog');
La URL en donde esté corriendo tu servidor deberás configurarla en el archivo acceptance.suite.yml.
actor: AcceptanceTester
modules:
enabled:
- PhpBrowser:
url: http://127.0.0.1:8000