Behat es un framework para realizar pruebas basadas en comportamientos, este puede ser de gran utilidad para asegurarnos que durante el desarrollo de un proyecto debido a que evita que algún cambio afecte características previamente implementadas, de este modo se asegura de que la funcionalidad global del proyecto no se vea afectada en ningún momento del desarrollo debido a bugs causados por alguna nueva característica.
> Para facilitar el proceso, todos los comandos serán ejecutados en la raíz del proyecto.
#### Requerimientos
- Instalacion de Drupal 7.
- Tambien puedes crear una instalacion de prueba utilizando
drush qd test_behat --core=drupal-7.x -y
- [Composer](https://getcomposer.org/download/).
- [Drush](http://docs.drush.org/en/master/install/).
#### Instalando dependencias
Para usar behat debemos instalar un conjunto de librerias las cuales obtendermos mediante el uso de composer ejecutando los siguientes comandos
composer require behat/behat
composer require drupal/drupal-extension
composer require drupal/drupal-driver
Podemos comprobar que las depedencias esten ahora disponibles en la carpeta /vendor del proyecto.
![Composer vendor files](https://cms.rootstack.com/sites/default/files/blog/img/fzwxi9xhcr.png)
#### Preparando el sitio para las pruebas
Para realizar las pruebas crearemos:
#####**Content Type**
![Creating Test CT](https://cms.rootstack.com/sites/default/files/blog/img/screenshot_from_2016-05-24_09-07-45.png)
- Name: Test
- Description: Test content for behat
#### Configurando Behat para usar Drupal
Comprobaremos que la instalacion de Behat sea satisfactoria ejecutando
![Check Behat Version](https://cms.rootstack.com/sites/default/files/blog/img/tearhhvjli.png)
vendor/behat/behat/bin/behat --version>
Crearemos el archivo **behat.yml** donde indicaremos la configuración del Behat para este proyecto especifico.
default:
autoload:
'': %paths.base%/features/bootstrap
suites:
default:
paths:
- %paths.base%/features/tests
contexts:
- FeatureContext
- Drupal\DrupalExtension\Context\DrupalContext
- Drupal\DrupalExtension\Context\DrushContext
- Drupal\DrupalExtension\Context\MinkContext
extensions:
Behat\MinkExtension:
goutte: ~
base_url: http://localhost:8888/ # Replace with your site's URL
Drupal\DrupalExtension:
blackbox: ~
api_driver: drupal
drush:
root: %paths.base%
drupal:
drupal_root: %paths.base%
> Basado en behat.yml.dist
Ejecutaremos `vendor/behat/behat/bin/behat --init` el cual creara la carpeta **features/** y creara un fichero base donde se pueden agregar pasos personalizados.
![Run Behat init](https://cms.rootstack.com/sites/default/files/blog/img/screenshot_from_2016-05-24_10-58-12.png)
#### Creando un test de Behat
Crearemos los archivos básicos para un realizar un test funcional de behat.
- En la raiz del proyecto.
- Crearemos la carpeta `./features/tests/`
- Crearemos un archivo llamado ./features/tests/content_types.**feature**
@api
Feature: Tests can be done with the test content type
Scenario: An administrator can see the content type at admin page.
Given I am logged in as a user with the "administrator" role
When I visit "/admin/structure/types"
Then I should see "Test"
Scenario: An administrator can see the tests nodes at content.
Given I am logged in as a user with the "administrator" role
And "Test" content:
| title | body |
| Test Node A | Some content |
| Test Node B | Another content |
| Test Node C | Content String |
When I visit "/admin/content"
Then I should see "Test Node A"
And I should see "Test Node B"
And I should see "Test Node C"
Scenario: An user can see a created node.
Given I am an anonymous user
And "Test" content:
| title | body | path[alias] |
| Test Node D | Some content for testing | testnoded |
When I am on the homepage
And I follow "Test Node D"
Then I should see the heading "Test Node D"
And I should see "Some content for testing"
Los test de **Behat** utilizan el lenguaje **Gherkin** donde se define las condiciones para confirmar el correcto funcionamiento de un software mediante pasos que no requieren conocimientos de programación para su entendimiento.
Cada archivo define una característica especifica y pueden tener distintos escenarios para la misma.
#### Corriendo test de Behat
Ahora procedemos a correr nuestro test mediante el uso del siguiente comando:
vendor/behat/behat/bin/behat features/tests/content_types.feature
![Behat Test Result](https://cms.rootstack.com/sites/default/files/blog/img/screenshot_from_2016-05-24_11-36-13.png)
Ya finalmente tendremos nuestra instalación de Drupal habilitada para realizar test automatizados mediante el uso de Behat, algo que resulta muy útil asegurando la integridad y evitando posibles errores causados en el desarrollo y regresiones.
Si desea probar el entorno utilizado para este Blog descargue el siguiente archivo: [drupal_behat.zip](http://www.rootstack.comhttps://cms.rootstack.com/sites/default/files/drupal_behat.zip)