Behat: Pruebas de Comportamiento en PHP
Introducción
Behat es una herramienta de código abierto para realizar pruebas de comportamiento (Behavior-Driven Development, BDD) en aplicaciones PHP. Permite escribir pruebas en un lenguaje natural que puede ser entendido tanto por desarrolladores como por stakeholders no técnicos, facilitando la colaboración y la comprensión de los requisitos del software.
Instalación
Para instalar Behat en tu proyecto PHP, puedes utilizar Composer. Ejecuta el siguiente comando en la raÃz de tu proyecto:
composer require --dev behat/behat
Este comando instalará Behat como una dependencia de desarrollo en tu proyecto.
Configuración Básica
Después de la instalación, necesitas inicializar Behat en tu proyecto. Ejecuta:
vendor/bin/behat --init
Este comando creará una estructura básica para tus pruebas, incluyendo un directorio features
y un archivo de contexto inicial.
Escribiendo Escenarios
Los escenarios en Behat se escriben en archivos con extensión .feature
utilizando el lenguaje Gherkin. Estos archivos se almacenan en el directorio features
. Veamos un ejemplo sencillo:
# features/login.feature
Feature: User Login
In order to access the application
As a registered user
I need to be able to log in
Scenario: Successful login
Given I am on the login page
When I fill in "username" with "johndoe"
And I fill in "password" with "secret123"
And I press "Login"
Then I should see "Welcome, John Doe"
Scenario: Failed login
Given I am on the login page
When I fill in "username" with "johndoe"
And I fill in "password" with "wrongpassword"
And I press "Login"
Then I should see "Invalid credentials"
Este ejemplo describe dos escenarios para la funcionalidad de inicio de sesión: uno exitoso y otro fallido.
Implementando el Contexto
Los pasos definidos en los escenarios deben ser implementados en una clase de contexto. Por defecto, Behat crea una clase FeatureContext
en features/bootstrap/FeatureContext.php
. Aquà tienes un ejemplo de cómo podrÃa verse:
<?php
// features/bootstrap/FeatureContext.php
use Behat\Behat\Context\Context;
use Behat\Gherkin\Node\PyStringNode;
use Behat\Gherkin\Node\TableNode;
use PHPUnit\Framework\Assert;
class FeatureContext implements Context
{
private $currentPage;
private $formData = [];
private $response;
/**
* @Given I am on the :page page
*/
public function iAmOnThePage($page)
{
$this->currentPage = $page;
}
/**
* @When I fill in :field with :value
*/
public function iFillInWith($field, $value)
{
$this->formData[$field] = $value;
}
/**
* @When I press :button
*/
public function iPress($button)
{
// Simula el envÃo del formulario
if ($button === 'Login') {
$this->response = $this->simulateLogin($this->formData['username'], $this->formData['password']);
}
}
/**
* @Then I should see :message
*/
public function iShouldSee($message)
{
Assert::assertStringContainsString($message, $this->response);
}
private function simulateLogin($username, $password)
{
// Simula la lógica de inicio de sesión
if ($username === 'johndoe' && $password === 'secret123') {
return "Welcome, John Doe";
}
return "Invalid credentials";
}
}
Este contexto implementa los pasos definidos en nuestros escenarios de inicio de sesión. Cada método está anotado con una expresión regular que coincide con los pasos en el archivo .feature
.
Ejecutando las Pruebas
Para ejecutar tus pruebas Behat, utiliza el siguiente comando en la terminal:
vendor/bin/behat
Behat ejecutará todos los escenarios definidos en tus archivos .feature
y mostrará los resultados en la consola.
Behat proporciona una forma poderosa y legible de definir y ejecutar pruebas de comportamiento en aplicaciones PHP. Al utilizar un lenguaje natural para describir el comportamiento esperado, Behat facilita la colaboración entre desarrolladores, testers y stakeholders no técnicos, mejorando la calidad y la comprensión de los requisitos del software.
La combinación de escenarios Gherkin fáciles de leer con implementaciones de contexto en PHP permite crear suites de pruebas robustas y mantenibles. A medida que tu proyecto crece, puedes expandir tus pruebas Behat para cubrir más funcionalidades y casos de uso complejos, asegurando que tu aplicación se comporte como se espera en diversos escenarios.