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.
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.
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.
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!"
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.
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
.
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
.
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.
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.
Jorge García
Fullstack developer