Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Behat Laravel Package

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.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

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.

  • Licensing (highest severity). GitHub reports 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.
  • Version lockstep. Two maintained branches (5.0.x and 4.6.x LTS) with different Symfony baselines (v5 moved to Symfony 6→7). The bundle version must track the DXP version; mismatches surface as non-obvious context/config failures.
  • Inherent flakiness. Browser-level acceptance tests via Selenium are the least stable tier of the pyramid; the changelog itself shows a disabled assertion and repeated Selenium image pins.
  • Low external adoption. 1 star, 0 dependents. As a vendor monorepo component, stars are a poor signal — but they accurately predict that community answers, third-party tutorials, and Stack Overflow coverage are near-zero. Support runs through Ibexa commercial channels.
  • Recipe --force. The documented install overwrites config; on an existing project this can clobber behat.yml and related files.

Key questions.

  1. Do we hold an active Ibexa DXP subscription, and has legal confirmed BUL vs. GPLv2 applicability for this repository?
  2. Which DXP major (4.6 LTS vs. 5.x) are we targeting, and does that pin the bundle branch?
  3. Is the acceptance-test tier already owned by QA, or would this create a new orphaned suite?
  4. What is our existing Behat/Mink/Selenium maturity — are we extending an established harness or standing one up?
  5. Who owns custom step definitions and fixtures, and what is the upgrade cadence obligation given near-monthly patch releases?

Integration Approach

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:

  1. Confirm license tier and target DXP branch.
  2. Install on a scratch/staging checkout first — not the primary repo — using the documented --no-scripts --no-plugins + sync-recipes sequence, capturing exactly which files the recipe writes.
  3. Diff recipe output against any existing behat.yml; adopt selectively instead of using --force on the mainline branch.
  4. Stand up the dependency chain (DB, search engine, Selenium) as disposable containers before writing a single feature file.
  5. Validate with one thin end-to-end scenario (login + content read) to prove the harness, then expand.

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.

Operational Impact

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.

  • Silent config overwrite via recipe --force — mitigate by diffing and committing config deliberately.
  • Version skew between bundle and DXP producing opaque context-loading or step-resolution errors.
  • Selenium/browser drift — the changelog shows repeated image version pins; unpinned or stale tags are a common source of intermittent red builds.
  • Search engine divergence — Solr vs. Elasticsearch behaviour differences already required compatibility work; scenarios passing on one engine may not on the other.
  • Fixture/state leakage — shared databases across parallel runs cause order-dependent failures.
  • Disabled assertions accumulating as tolerated debt, quietly eroding suite credibility.

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.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
roundly-consulting/kubernetes-api-for-laravel
roundly-consulting/plausible-for-laravel
gvp/gvp-laravel-template
metasyncsite/laravel-metasync-client
roundly-consulting/onboarding-for-laravel
andydefer/laravel-notification
adachsoft/cli-process-tester
jhaskell13/laraflow
sebastienheyd/boilerplate-media-manager
ccast/tagixo-primix
pretendtrue/laravel-builder
sawmainek/laravel-scout-tntsearch-driver
tomshaw/laravel-calendar-table
dibakar/laravel-ownership
steadrun/laravel-monitor
labyrinthe/connect-laravel
elmogy/layan
drewdan/sentinel-client
dskripchenko/laravel-llm
fatryst/nuonuo