Qué es codeception, cómo instalarlo y cómo utilizarlo ?

Author
By Darío Rivera
Posted on 2022-05-26 in PHPUnit

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

Acerca de Darío Rivera

Author

Ingeniero de desarrollo en PlacetoPay , Medellín. Darío ha trabajado por más de 6 años en lenguajes de programación web especialmente en PHP. Creador del microframework DronePHP basado en Zend y Laravel.

Sólo aquellos que han alcanzado el éxito saben que siempre estuvo a un paso del momento en que pensaron renunciar.