traviscarden / behat-table-comparison
Provides an equality assertion for comparing Behat TableNode tables.
Package info
github.com/TravisCarden/behat-table-comparison
pkg:composer/traviscarden/behat-table-comparison
Requires
- php: ^7.3 || ^8.0
- behat/gherkin: ^4.4.4
- sebastian/diff: >=1.4
Requires (Dev)
- behat/behat: ^3.3
- phpunit/phpunit: ^9.5
- squizlabs/php_codesniffer: ^3.6
This package is auto-updated.
Last update: 2026-03-24 23:34:38 UTC
README
The Behat Table Comparison library provides an equality assertion for comparing Behat TableNode tables.
Installation & Usage
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') ->setDuplicateRowsLabel('Duplicate characters') ->assert(); } }
Output is like the following:
Error Message Specification
When tables are unequal, the assertion throws a detailed error message with labeled sections.
Difference sections
--- Missing rows: Rows present in expected but not in actual.+++ Unexpected rows: Rows present in actual but not in expected.*** Duplicate rows: Rows present on both sides with different multiplicity, shown as(appears N time/times, expected M).
Row-order diagnostics
When row order is respected and rows are out of order:
*** Row order mismatchis shown.- Per-row diagnostics are listed as
... should be at position X, found at Y. - Full order context is appended under:
Expected orderActual order
When row content differs while respecting row order, semantic missing/unexpected/duplicate sections are shown first, then full expected/actual order tables.
Header mismatch diagnostics
When expectHeader(...) is used and the first row does not match:
--- Expected header+++ Given header
Label customization
All user-facing section labels are configurable via defaults plus getter/setter pairs:
- Missing rows
- Unexpected rows
- Duplicate rows
- Row order mismatch
- Expected header
- Given header
- Expected order subheading
- Actual order subheading
Examples
See features/bootstrap/FeatureContext.php and features/examples.feature for more examples.
Contribution
All contributions are welcome according to normal open source practice.
