Drupal Test

Cheatsheet for End to End Tests

Generating Data

When filling out forms you probably want to use the generators.

 $el['.t-field_first_name']->setValue($this->generate('name:first'));
Generators
email ()
name ($length = 5)
password ($length = 32)
phone ()
sentence ($wordcount = 5)
title ($wordcount = 5)
url ()
username ($length = 10)
words ($wordcount = 5)
EndToEndTestCase
assert ($fail_message = '')
assertElementExists ($css_selector, $failure_message = '')
assertElementNotExists ($css_selector, $failure_message = '')
assertElementNotVisible ($css_selector, $failure_message = '')
assertElementVisible ($css_selector, $failure_message = '')
assertManual ($assertion, array $prerequisite_steps = Array)
beginObservation ($button_title = '', array $button_css_classes = Array)
debugger ()
destructiveAssertPreConditions ()
el ($css_selector)
els ($css_selector)
endObservation ()
generate ($method)
getDomElements (array $css_selectors)
getSession ()
getStored ($key, $default = NULL)
interactiveAssertPreConditions ()
loadPageByUrl ($url)
requireElement ($css_selector)
scrollTop ()
setEmailHandler (AKlump\DrupalTest\Utilities\EmailHandlerInterface $handler)
store ($key, $value)
wait ($seconds)
waitFor (callable $test, $description = NULL, $timeout = NULL)
waitForElement ($css_selector, $timeout = NULL)
waitForElementNotVisible ($css_selector, $timeout = NULL)
waitForElementVisible ($css_selector, $timeout = NULL)
waitForEmail ($expected_count = 1, $timeout = NULL)
waitForObserver ($css_selector)
waitForPageContains ($substring, $timeout = NULL)

There is some overlap in assertions between methods of ClientTestCase and methods on Mink's WebAssert class, but the former always uses css selectors, so it's a little less verbose.

Working with NodeElement objects

Learn [more here].(http://mink.behat.org/en/latest/guides/traversing-pages.html#documentelement-and-nodeelement)

<?php

class Test {

  public function testExample() {

    // By using getDomElements we ensure only one of .t-link.
    $el = $this->loadPageByUrl('/node/9750')
      ->getDomElements([
        '.t-link',
      ]);

    // $el['.t-link'] is an instance of NodeElement.
    $el['.t-link']->click();

    // Altenatively you could do this.  But it will not break if there is
    // more than one '.t-link' on the page. So it's less certain.
    $this->el('.t-link')->click()
      }

}
NodeElement
attachFile ($path)
blur ()
check ()
click ()
doubleClick ()
dragTo (Behat\Mink\Element\ElementInterface $destination)
focus ()
getAttribute ($name)
getParent ()
getTagName ()
getValue ()
getXpath ()
hasAttribute ($name)
hasClass ($className)
isChecked ()
isSelected ()
isVisible ()
keyDown ($char, $modifier = NULL)
keyPress ($char, $modifier = NULL)
keyUp ($char, $modifier = NULL)
mouseOver ()
press ()
rightClick ()
selectOption ($option, $multiple = false)
setValue ($value)
submit ()
uncheck ()

Making Assertions with Mink

Load a page and then make assertions using Mink's WebAssert class.

<?php

class Test {

  public function testExample() {
    $this->loadPageByUrl('/node/9750')
      ->assert()
      ->elementTextContains('css', '#button', 'English');

    $this->assert()
      ->elementTextContains('css', '#button-2', 'Spanish');
  }

}
WebAssert
addressEquals ($page)
addressMatches ($regex)
addressNotEquals ($page)
checkboxChecked ($field, Behat\Mink\Element\TraversableElement or NULL $container = NULL)
checkboxNotChecked ($field, Behat\Mink\Element\TraversableElement or NULL $container = NULL)
cookieEquals ($name, $value)
cookieExists ($name)
elementAttributeContains ($selectorType, $selector, $attribute, $text)
elementAttributeExists ($selectorType, $selector, $attribute)
elementAttributeNotContains ($selectorType, $selector, $attribute, $text)
elementContains ($selectorType, $selector, $html)
elementExists ($selectorType, $selector, Behat\Mink\Element\ElementInterface or NULL $container = NULL)
elementNotContains ($selectorType, $selector, $html)
elementNotExists ($selectorType, $selector, Behat\Mink\Element\ElementInterface or NULL $container = NULL)
elementsCount ($selectorType, $selector, $count, Behat\Mink\Element\ElementInterface or NULL $container = NULL)
elementTextContains ($selectorType, $selector, $text)
elementTextNotContains ($selectorType, $selector, $text)
fieldExists ($field, Behat\Mink\Element\TraversableElement or NULL $container = NULL)
fieldNotExists ($field, Behat\Mink\Element\TraversableElement or NULL $container = NULL)
fieldValueEquals ($field, $value, Behat\Mink\Element\TraversableElement or NULL $container = NULL)
fieldValueNotEquals ($field, $value, Behat\Mink\Element\TraversableElement or NULL $container = NULL)
pageTextContains ($text)
pageTextMatches ($regex)
pageTextNotContains ($text)
pageTextNotMatches ($regex)
responseContains ($text)
responseHeaderContains ($name, $value)
responseHeaderEquals ($name, $value)
responseHeaderMatches ($name, $regex)
responseHeaderNotContains ($name, $value)
responseHeaderNotEquals ($name, $value)
responseHeaderNotMatches ($name, $regex)
responseMatches ($regex)
responseNotContains ($text)
responseNotMatches ($regex)
statusCodeEquals ($code)
statusCodeNotEquals ($code)