kunstmaan/behat-bundle
Kunstmaan BehatBundle adds Behat behavior-driven testing support to Symfony and Kunstmaan projects, offering reusable contexts, Mink integration, and practical helpers for testing CMS features, admin screens, and user workflows. It helps teams write readable acceptance tests and improve QA.
composer require --dev kunstmaan/behat-bundle. Before committing to this, inspect the package's composer.json — it was last released in 2014 and targets the Symfony 2.x / Behat 2–3 era. On a modern Symfony or Behat 3.4+ project, expect dependency resolution conflicts; if it won't install, treat the repo as reference code rather than a dependency.AppKernel::$bundles guarded by in_array($this->getEnvironment(), ['test', 'dev']); modern: config/bundles.php with ['test' => true, 'dev' => true]).Context/ directory and its behat.yml example. The useful pieces are small: a MinkContext subclass, a screenshot-on-failure subcontext, and an AJAX-wait subcontext.behat.yml to use the bundle's context as the base class for your FeatureContext, or register its subcontexts alongside yours. Start with a single scenario that fails on purpose so you can confirm a screenshot is written and the AJAX wait actually blocks.FeatureContext (or in a project-level BaseContext) so the extra subcontexts and the assertPageContainsText()-style assertions are available to every feature file. Keep your own business-domain steps in a thin context on top.jQuery.active === 0; wrap it in your own @Given I wait for AJAX step so the intent reads well in feature files and you can swap the implementation later.behat.yml point at it. This keeps screenshot paths and driver config consistent.@javascript (or your project's convention) and keep non-JS scenarios on Goutte for speed. The AJAX and screenshot contexts should be no-ops or skipped without a real browser.@BeforeStep/@AfterStep) and the context registration in behat.yml.jQuery.active tells you nothing about fetch, axios, or Angular/React request activity. For non-jQuery apps, replace the wait with a polling assertion (wait for a specific selector/text) and keep the bundle's step as a thin alias..gitignore. Relative paths resolve from the Behat working directory, which differs between local and CI runs — use an absolute or env-driven path.behat.yml in an order where your base context is available; a misordered contexts: list is the usual cause of "undefined step" errors.behat --dry-run to validate step definitions, behat --format=pretty --no-colors for readable failures, and check the screenshot dir immediately after a red run. If AJAX waits hang, lower the timeout temporarily and log jQuery.active from a step.AjaxWaiter helper) so a future Behat upgrade doesn't take the whole suite down with it.How can I help you explore Laravel packages today?