The Behat Table Comparison library provides an equality assertion for comparing Behat TableNode
tables.
Install the library via Composer:
composer require --dev traviscarden/behat-table-comparison
Then use the TableEqualityAssertion
class in your FeatureContext
class:
<?php
use Behat\Behat\Context\Context;
use Behat\Gherkin\Node\TableNode;
use TravisCarden\BehatTableComparison\TableEqualityAssertion;
class FeatureContext implements Context
{
/**
* @Then I should include the following characters in the Company of the Ring
*/
public function iShouldIncludeTheFollowingCharactersInTheCompanyOfTheRing(TableNode $expected)
{
// Get the data from the application and create a table from it.
$application_data = [
['Frodo Baggins', 'Hobbit'],
['Samwise "Sam" Gamgee', 'Hobbit'],
['Saruman the White', 'Wizard'],
['Legolas', 'Elf'],
['Gimli', 'Dwarf'],
['Aragorn (Strider)', 'Man'],
['Boromir', 'Man'],
['Meriadoc "Merry" Brandybuck', 'Hobbit'],
['Peregrin "Pippin" Took', 'Hobbit'],
];
$actual = new TableNode($application_data);
// Build and execute assertion.
(new TableEqualityAssertion($expected, $actual))
->expectHeader(['name', 'race'])
->ignoreRowOrder()
->setMissingRowsLabel('Missing characters')
->setUnexpectedRowsLabel('Unexpected characters')
->assert();
}
}
Output is like the following:
See features/bootstrap/FeatureContext.php
and features/examples.feature
for more examples.
Some inequality detection currently works but does not yet display a helpful error message, because it has not been decided what it should show. Please help me specify error messages for complex differences.
All contributions are welcome according to normal open source practice.