ibexa/behat
Ibexa BehatBundle speeds up writing Behat tests for Ibexa DXP, with docs covering setup, running tests, available features, and extending the bundle. Install via Composer as a dev dependency.
Architecture fit. ibexa/behat is not a general-purpose Laravel/PHP library — it is the vendor-maintained Behat test bundle for Ibexa DXP (formerly eZ Platform), a commercial Symfony-based CMS/DXP. It ships Behat contexts, step definitions, feature fixtures, and ready-made behat.yml profiles (including a headless storefront profile) so teams can write BDD acceptance tests against an Ibexa instance without rebuilding harness plumbing. Fit is therefore binary rather than incremental: if Ibexa DXP is (or will be) in the estate, the bundle is the sanctioned path to acceptance testing and delivers real leverage. If the stack is Laravel-only, there is no fit — the package assumes Symfony 6/7 kernel, Ibexa bundles, and Ibexa-specific APIs.
Integration feasibility. Low technical friction, high environmental friction. It is a --dev dependency installed via Composer plus Symfony Flex recipes (composer sync-recipes ibexa/behat --force -v), so there is no production runtime surface. The real work is environmental: tests require a bootable Ibexa instance, database with fixtures, a search engine (Solr/Elasticsearch variants are explicitly handled per the changelog), and a Selenium/Chrome container for browser-driven scenarios. Feasible, but it is a full-stack test harness, not a unit-test add-on.
Technical risk.
NOASSERTION; the README defines a dual model — Ibexa Business Use License v2.4+ (valid only with a paid Ibexa DXP subscription) or GPLv2. GPLv2 is copyleft and rarely acceptable for proprietary application code; the BUL path depends on an active commercial subscription. This must be resolved by legal/procurement before any engineering work, not after.--force. The documented install overwrites config; on an existing project this can clobber behat.yml and related files.Key questions.
Stack fit. Symfony 6/7 + PHP 8.3/8.4 (per CI config) + Behat/Mink + Selenium + Ibexa DXP. Composer require-dev only. For a Laravel shop this is a non-starter without an Ibexa footprint; for an Ibexa shop it is the reference implementation and should be preferred over hand-rolling contexts.
Migration path. Treat as greenfield test tooling rather than a migration:
--no-scripts --no-plugins + sync-recipes sequence, capturing exactly which files the recipe writes.behat.yml; adopt selectively instead of using --force on the mainline branch.Compatibility. Hard-coupled to the Ibexa DXP major version and Symfony baseline. Plan a version matrix (DXP version ↔ bundle branch ↔ PHP version ↔ Selenium image tag) and treat it as a maintained artifact, not tribal knowledge. The 4.6 LTS branch is the conservative choice; 5.x carries the Symfony 7 migration and rebranded field-type identifiers, so any ported scenarios referencing legacy identifiers will need rework.
Sequencing. License gate → environment gate → harness smoke test → scenario coverage → CI gating. Do not invert: teams routinely sink weeks into feature authoring before discovering the license or Selenium dependency blocks them. Sequence the licensing decision as a hard predecessor to any engineering estimate, and defer breadth of scenario coverage until the harness has proven stable across ~10 consecutive CI runs.
Maintenance. This is the dominant cost. The bundle releases frequently (near-monthly patches across two branches), and because it is require-dev, upgrades are low-risk to production but still require re-running the suite to catch step-definition drift. Budget a recurring allocation for branch bumps, Selenium image pins, and repairing scenarios broken by UI changes in DXP admin/storefront. Custom step definitions become a de facto internal library requiring an owner.
Support. No meaningful community support surface. Escalation is the Ibexa commercial support channel, which is only available under subscription — reinforcing the license gate. Internal capability must be built, not borrowed; expect thin external documentation beyond the four in-repo guides (getting started, running tests, features, extending).
Scaling. Scales linearly in CI cost, not gracefully. Each run needs a full application instance, database fixtures, search index, and a Selenium/Chrome container — minutes per pipeline, and parallelisation means multiple isolated stacks, each with its own DB and index. This is the most expensive test tier per assertion; cap it to critical user journeys (content lifecycle, commerce checkout, permissions) and push volume down to integration/unit tiers.
Failure modes.
--force — mitigate by diffing and committing config deliberately.Ramp-up. Moderate for engineers already fluent in Behat/Gherkin and Symfony test kernels — days to a first working scenario. Steep for teams new to BDD: the barrier is not this package but Gherkin authoring discipline, Mink/Selenium debugging, and Ibexa domain modelling. The bundled feature examples are the primary learning asset and are genuinely useful, but they double as a catalogue of DXP-specific behaviour that assumes domain familiarity. Recommend one engineer become the designated harness owner, run a single pilot epic end-to-end, and only then standardise the practice — with an explicit decision point on whether the acceptance tier earns its CI cost.
How can I help you explore Laravel packages today?