The Drupal Extension is an integration layer between Behat, Mink Extension, and Drupal. It provides step definitions for common testing scenarios specific to Drupal sites.
- You'll need something resembling this
composer.json
file
{
"require": {
"drupal/drupal-extension": "*"
},
"config": {
"bin-dir": "bin/"
}
}
- Then run
php composer.phar install
To download the required dependencies. If composer isn't installed
curl -s https://getcomposer.org/installer | php
- At a minimum, your
behat.yml
file will look like this
default:
paths:
features: 'features'
extensions:
Behat\MinkExtension\Extension:
goutte: ~
selenium2: ~
base_url: http://git6site.devdrupal.org/
Drupal\DrupalExtension\Extension:
blackbox: ~
- To see a list of available step definitions
bin/behat -dl
If the step definitions aren't listed, try running this command:
bin/behat --init
-
Start adding your feature files to the
features
directory of your repository. -
Features that require API access in order to setup the proper testing conditions can be tagged with
@api
. This will bootstrap the driver specified by theapi_driver
parameter (which defaults to the drush driver). When using the drush driver, this must be initialized via thebehat.yml
file.
Drupal\DrupalExtension\Extension:
blackbox: ~
# Set the drush alias to "@self" by default, when executing tests from within the drupal installation.
drush:
alias: self
Alternatively, the root path to the Drupal installation may be specified.
Drupal\DrupalExtension\Extension:
blackbox: ~
drush:
root: /my/path/to/drupal
If you want to use native API calls instead of drush API you should configure your behat.yml as follows:
Drupal\DrupalExtension\Extension:
api_driver: "drupal"
drupal:
drupal_root: "/absolute/path/to/drupal"
- Targeting content in specific regions can be accomplished once those regions have been defined.
Drupal\DrupalExtension\Extension:
region_map:
My region: "#css-selector"
Content: "#main .region-content"
Right sidebar: "#sidebar-second"
-
Text strings, such as Log out or the Username field can be altered via
behat.yml
if they vary from the default values.Drupal\DrupalExtension\Extension: text: log_out: "Sign out" log_in: "Sign in" password_field: "Enter your password" username_field: "Nickname"
-
The Drupal Extension is capable of discovering additional step-definitions provided by subcontexts. Module authors can provide these in files following the naming convention of
foo.behat.inc
. Once that module is enabled, the Drupal Extension will load these.
Additional subcontexts can be loaded by either placing them in the bootstrap directory (typically features/bootstrap
) or by adding them to behat.yml
.
Drupal\DrupalExtension\Extension:
subcontexts:
paths:
- "/path/to/additional/subcontexts"
- "/another/path"
To disable automatic loading of subcontexts:
Drupal\DrupalExtension\Extension:
subcontexts:
autoload: 0
- The file:
features/bootstrap/FeatureContext.php
is for testing the Drupal Extension itself, and should not be used as a starting point for a feature context. A feature context that extends the Drupal Extension would look like this:
use Drupal\DrupalExtension\Context\DrupalContext;
class FeatureContext extends DrupalContext {
...
}
- Methods in your
FeatureContext
class can be tagged to fire before certain events:
use Drupal\DrupalExtension\Event\EntityEvent;
...
/**
* Call this function before nodes are created.
*
* @beforeNodeCreate
*/
public function alterNodeObject(EntityEvent $event) {
$node = $event->getEntity();
// Alter node object as needed.
}
Other available tags include @beforeTermCreate
and @beforeUserCreate