4 minutos de lectura

Behat: Pruebas de Comportamiento en PHP

Puntos a ver ...

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.