Behat : présence de X ou plus de X elements

Si vous avez déjà écris des tests avec Behat vous avez surement déjà voulu compter la présence de plusieurs éléments.

Il existe une fonction dans Mink pour compter le nombre d'éléments en fonction d'un sélecteur dans une page:

/**
 * Checks, that (?P<num>\d+) CSS elements exist on the page
 *
 * @Then /^(?:|I )should see (?P<num>\d+) "(?P<element>[^"]*)" elements?$/
 */
public function assertNumElements($num, $element)  
{
    $this->assertSession()
         ->elementsCount('css', $element, (int)$num);
}

Le problème c'est que vous ne pouvez pas tester la présence d'au moins X éléments.

Voici une méthode pour le faire:

/**
 * Check that there are more than or = to a number of elements on a page
 *
 * @Then /^I should see more "([^"]*)" or more "([^"]*)" elements$/
 */
public function iShouldSeeMoreOrMoreElements($num, $element)  
{
    $container = $this->getSession()->getPage();
    $nodes     = $container->findAll('css', $element);

    if ((int)$num > count($nodes)) {
        $message = sprintf(
            '%d elements less than %s "%s" found on the page, but should be %d.',
            count($nodes),
            $selectorType,
            $selector,
            $count
        );
        throw new ExpectationException($message, $this->session);
    }
}