saeven / zf3-circlical-behat-fixtures
Doctrine & Nelmio/Alice fixtures for Zend Framework 3 and Behat
Installs: 8 981
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 0
Open Issues: 0
pkg:composer/saeven/zf3-circlical-behat-fixtures
Requires
- php: ^7.4.0
 - behat/behat: 3.*@stable
 - doctrine/common: 2.11.0
 - doctrine/data-fixtures: @stable
 - doctrine/doctrine-module: ^1.2||2.1.*
 - doctrine/doctrine-orm-module: ^1.1||2.1.*
 - doctrine/orm: ^2.5||2.6.*
 - doctrine/persistence: @stable
 - nelmio/alice: @stable
 - symfony/console: *
 - zendframework/zend-eventmanager: 3.2.*
 - zendframework/zend-loader: 2.6.*
 - zendframework/zend-modulemanager: 2.8.*
 - zendframework/zend-mvc: ^3.0
 - zendframework/zend-servicemanager: ^3.0
 
Requires (Dev)
- codacy/coverage: ^1.0
 - friends-of-phpspec/phpspec-code-coverage: @stable
 - phpspec/phpspec: 6.1.*
 
This package is auto-updated.
Last update: 2025-10-17 12:45:43 UTC
README
Trigger fixture loading from within Behat tests, like so:
Feature: I can define fixtures from within my tests
  In order to keep my test database clean
  As a developer writing behat tests
  I want to load fixtures directly from within my test context
  Scenario: Test loading a new fixture
    Given fixture "Application/user" is loaded
    And fixture "Application/user" is loaded
    And fixtures "Application/user, Billing/invoices" are loaded
This package adds a behavior to alice, by way of automatically falling back onto reflection when a setter for a fixture-defined value is not available, and that value is nontrivial.
Highlights:
- fixtures provided by the excellent nelmio/alice
 - comes with a ready-to-go context you can plug into Behat
 - define what fixtures are required right at the Scenario level
 - adds a convenient CLI command as well
 
Inspired by dkorsak/doctrine-data-fixture-module -- thanks!
Installation
- Composer install, then add 
CirclicalBehatFixturesto your application.config.php 
Wiring it into Behat
- Edit your behat.yml, to add the 
CirclicalBehatFixtures\Behat\DatabaseContextcontext 
e.g.
# behat.yml
default:
  autoload: [ '%paths.base%/../contexts' ]
  suites:
    core_features:
      paths: [ '%paths.base%/../features' ]
      contexts:
        - FeatureContext
        - CirclicalBehatFixtures\Behat\DatabaseContext
Or, if you need to override the location of the Doctrine bin (where the symlink points to)
# behat.yml
default:
  autoload: [ '%paths.base%/../contexts' ]
  suites:
    core_features:
      paths: [ '%paths.base%/../features' ]
      contexts:
        - FeatureContext
        - CirclicalBehatFixtures\Behat\DatabaseContext:
          - vendor/doctrine/doctrine-module/bin/doctrine-module
Author a Fixture
The syntax for fixture identification is very simple, MODULE/fixturename. Examples:
- Application/user
 - Application/roles
 - Member/purchases
 
In your individual ZF modules, you will save your nelmio/alice fixtures as module/MODULE/user.yml.  Examples based on fixture IDs above:
- module/Application/fixtures/user.yml
 - module/Application/fixtures/roles.yml
 - module/Member/fixtures/purchases.yml
 
Author a Scenario
Do this the way you usually would. The context provided by this module gives you a new action:
Given Fixture "FIXTUREID" is loaded
e.g.
Given Fixture "Application/user" is loaded
You can stack these as you need. The first one in a feature will auto-purge, the subsequent ones will append.
Container Support
If you need to import the fixture in a Docker command for example, perhaps as a part of a CI/CD chain, you'll need to change where the fixture gets loaded. In short, instead of this command:
vendor/bin/doctrine-module orm:fixtures:load --fixtures=Application/orders
You might need to run something like this command:
/usr/local/bin/docker container exec -w /code -i $(docker-compose ps -q php) php vendor/bin/doctrine-module orm:fixtures:load --fixtures=Application/orders
You can achieve this by outputting a prefix into a file with name circlical-fixtures-cmd-prefix, e.g. in your CI/CD scripts:
echo "/usr/local/bin/docker container exec -w /code -i $(docker-compose ps -q php) " > ./circlical-fixtures-cmd-prefix
It becomes your responsibility to create (at startup) and delete (at tear-down) this file in your CI chain configuration.