A tool for specifying Drupal architecture details and generating automated tests for them

Installs: 2 174 593

Dependents: 3

Suggesters: 0

Security: 0

Stars: 145

Watchers: 21

Forks: 33

Open Issues: 12



v6.1.0 2024-01-12 21:52 UTC


Packagist Tests

This project provides a tool for specifying Drupal architecture details and generating automated tests for them. It consists of 1) a Google Sheet for capturing specification and generating tests from it and 2) the Behat contexts that automate the generated tests (examples).

Getting started

Google sheet

Copy the current Google sheet to your Google Drive:

Google Sheet Screenshot

Behat tests

Assuming you already have Behat installed via Composer...

  1. Install the Behat contexts:

    composer require --dev acquia/drupal-spec-tool
  2. Add the new contexts to your Behat configuration, e.g.:

    # behat.yml
            - Acquia\DrupalSpecTool\Context\AccessControlContext
            - Acquia\DrupalSpecTool\Context\ContentModelContext
            - Acquia\DrupalSpecTool\Context\MediaContext
            - Acquia\DrupalSpecTool\Context\MenuContext
            - Acquia\DrupalSpecTool\Context\ViewsContext
            - Acquia\DrupalSpecTool\Context\WorkflowContext
  3. Copy the default feature files (representing the out-of-the-box configuration of Lightning) to your features directory. For example, given a BLT-based project:

    mkdir -p tests/behat/features/drupal-spec-tool
    cp vendor/acquia/drupal-spec-tool/features/*.feature tests/behat/features/drupal-spec-tool/
  4. As you change the specification, update the features to match using the generated Gherkin on the "Behat" tab of the Google sheet. (See Advanced below to automate this process.)

  5. Run Behat! If the tests pass, your application matches the specification. If not, change one or the other according to your needs.


Learn more about the features of the tool and best practices for using it in the announcement blog post on the Acquia Developer Center.


You can supplement or override out-of-the-box behavior by extending and replacing the default context classes with your own, e.g.:

namespace AcmeCorp;

class CustomContentModelContext extends Acquia\DrupalSpecTool\Context\ContentModelContext {

   * Override existing functionality.
   * @Then exactly the following content entity type bundles should exist
  public function assertBundles(TableNode $expected) {
    // ...

   * Add new functionality.
   * @Then something new should be true
  public function assertSomethingNew(TableNode $expected) {
    // ...

 # behat.yml
-        - Acquia\DrupalSpecTool\Context\ContentModelContext
+        - AcmeCorp\CustomContentModelContext

Supporting tools

The community has provided tools to build on the Drupal Spec Tool:

  • Drupal Spec Tool Commands - Provides commands to automatically update the Google Sheet to match an existing Drupal site. This is helpful for adding the Drupal Spec Tool on a pre-existing project.
  • Drupal Entity Generator (DEG) - Automatically generates Drupal configuration based on the Google Sheet, i.e., goes "the other way" and updates your Drupal site to match your specification.

Known issues

See open bug reports in the issue queue.


Contributions are welcome! See


Copyright (C) 2018 Acquia, Inc.

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.