Volver a la página principal
martes 16 julio 2024
6

Cómo Utilizar Behat en PHP

Instalación de Behat

Para instalar Behat, necesitas tener Composer instalado. Composer es un gestor de dependencias para PHP. Si no tienes Composer instalado, puedes seguir las instrucciones en getcomposer.org.

Instalación de Behat mediante Composer

Primero, inicializa un nuevo proyecto PHP o navega a tu proyecto existente y ejecuta el siguiente comando para inicializar Composer:

composer init

Luego, instala Behat y Mink (para pruebas de navegador) utilizando Composer:

composer require --dev behat/behat
composer require --dev behat/mink
composer require --dev behat/mink-extension
composer require --dev behat/mink-goutte-driver
composer require --dev behat/mink-selenium2-driver

Esto instalará Behat y sus dependencias en tu proyecto.

Configuración de Behat

Una vez instalado Behat, necesitas configurarlo. Para hacerlo, crea un archivo behat.yml en la raíz de tu proyecto:

default:
  suites:
    default:
      paths:
        features: features
      contexts:
        - FeatureContext
  extensions:
    Behat\MinkExtension:
      default_session: goutte
      goutte: ~
      selenium2: ~
      base_url: http://localhost

Este archivo de configuración define las suites de pruebas, las extensiones y los controladores de sesiones.

Crear Features con Gherkin

Behat utiliza Gherkin para definir las especificaciones. Gherkin es un lenguaje legible por humanos para escribir escenarios de prueba. Crea un directorio features en la raíz de tu proyecto y dentro de este directorio, crea un archivo example.feature con el siguiente contenido:

Feature: User Login
  In order to access the application
  As a registered user
  I need to be able to log in

  Scenario: Successful login with valid credentials
    Given I am on the login page
    When I fill in "username" with "user"
    And I fill in "password" with "password"
    And I press "login"
    Then I should see "Welcome, user!"

Crear Contextos

Los contextos en Behat son clases PHP que contienen las definiciones de los pasos (steps) utilizados en los archivos .feature. Crea un archivo FeatureContext.php dentro del directorio features con el siguiente contenido:

<?php

use Behat\Behat\Context\Context;
use Behat\MinkExtension\Context\MinkContext;

class FeatureContext extends MinkContext implements Context
{
    /**
     * Initializes context.
     *
     * Every scenario gets its own context instance.
     * You can also pass arbitrary arguments to the context constructor through behat.yml.
     */
    public function __construct()
    {
    }
}

Este archivo extiende MinkContext, que proporciona métodos para interactuar con la interfaz web.

Ejecutar Pruebas

Para ejecutar las pruebas, utiliza el siguiente comando:

vendor/bin/behat

Este comando ejecutará todos los escenarios definidos en los archivos .feature dentro del directorio features.

Definir Pasos Personalizados

En muchos casos, necesitarás definir pasos personalizados que no están cubiertos por los métodos proporcionados por MinkContext. Para hacerlo, agrega métodos a FeatureContext.php con anotaciones Gherkin.

<?php

use Behat\Behat\Context\Context;
use Behat\Behat\Tester\Exception\PendingException;
use Behat\MinkExtension\Context\MinkContext;

/**
 * Defines application features from the specific context.
 */
class FeatureContext extends MinkContext implements Context
{
    /**
     * @Given I am on the login page
     */
    public function iAmOnTheLoginPage()
    {
        $this->visitPath('/login');
    }

    /**
     * @When I fill in :field with :value
     */
    public function iFillInWith($field, $value)
    {
        $this->fillField($field, $value);
    }

    /**
     * @When I press :button
     */
    public function iPress($button)
    {
        $this->pressButton($button);
    }

    /**
     * @Then I should see :text
     */
    public function iShouldSee($text)
    {
        $this->assertPageContainsText($text);
    }
}

En este ejemplo, hemos definido varios pasos personalizados para los escenarios en example.feature.

Integración con Mink para Pruebas de Navegador

Behat se puede integrar con Mink para realizar pruebas en navegadores reales. Para utilizar un navegador real como Selenium, asegúrate de tener el servidor de Selenium WebDriver en ejecución:

java -jar selenium-server-standalone.jar

Actualiza tu archivo behat.yml para usar Selenium:

default:
  extensions:
    Behat\MinkExtension:
      default_session: selenium2
      selenium2:
        wd_host: http://localhost:4444/wd/hub
      base_url: http://localhost

Ahora, cuando ejecutes vendor/bin/behat, Behat utilizará Selenium para ejecutar las pruebas en un navegador real.

Conclusión

Behat es una herramienta poderosa para el desarrollo orientado por comportamiento en PHP, permitiendo a los equipos escribir especificaciones en un lenguaje natural que todos los miembros pueden entender. Con la integración de Mink, Behat puede realizar pruebas en navegadores reales, proporcionando una cobertura de pruebas completa para aplicaciones web. Siguiendo estos pasos, puedes configurar y utilizar Behat para mejorar la calidad y la colaboración en tu proyecto PHP.

Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer