impulsephp/fixtures fournit un provider de fixtures pour ImpulsePHP, pensé pour rester proche des conventions réelles du dépôt : services simples dans le conteneur, exécution via db, commandes Symfony Console explicites, et scénarios métier composables avec des stories.
- enregistre un gestionnaire de fixtures dans le conteneur ;
- scanne les fixtures applicatives dans
src/Fixtureettests/Fixtures; - scanne les stories de fixtures dans
src/Fixture/Storyettests/Fixtures/Story; - exécute les fixtures avec
Cycle\ORM\ORMInterfaceviaimpulsephp/db; - fournit un contexte d’exécution avec références, seed déterministe et accès simple à Faker ;
- propose une commande
make:fixturepour générer un squelette ; - propose une commande
fixtures:runpour exécuter toutes les fixtures, une fixture précise ou une story nommée.
- PHP 8.2 ou supérieur ;
- une application ImpulsePHP avec
impulsephp/core; impulsephp/dbchargé dans les providers de l’application ;- un fichier
impulse.phpà la racine de l’application.
composer require impulsephp/fixturesLe package déclare son provider via extra.impulse-provider. Si votre application n’utilise pas l’auto-découverte, ajoutez Impulse\Fixtures\FixturesProvider à la configuration providers de impulse.php.
<?php
use Impulse\Db\DbProvider;
use Impulse\Fixtures\FixturesProvider;
return [
'env' => 'dev',
'providers' => [
DbProvider::class,
FixturesProvider::class,
],
'database' => [
'name' => 'app',
'driver' => 'sqlite',
'database' => __DIR__ . '/var/storage/database.sqlite',
],
];Options disponibles :
fixtures.paths: chemins additionnels de fixtures.fixtures.story_paths: chemins additionnels de stories.fixtures.locale: locale Faker par défaut. Défauten_US.fixtures.seed: seed par défaut utilisée si la commande n’en reçoit pas.
use App\Entity\User;
use Impulse\Fixtures\AbstractFixture;
use Impulse\Fixtures\FixtureContext;
final class UserFixture extends AbstractFixture
{
public function load(FixtureContext $context): void
{
for ($i = 0; $i < 5; $i++) {
$user = new User();
$user->email = $context->faker()->unique()->safeEmail();
$context->persist($user);
}
}
}Story associée :
use App\Fixture\PostFixture;
use App\Fixture\UserFixture;
use Impulse\Fixtures\AbstractStory;
final class DemoStory extends AbstractStory
{
public function fixtures(): array
{
return [
UserFixture::class,
PostFixture::class,
];
}
}Exécution :
php ./bin/impulse fixtures:run --story=Demo --seed=42Le dépôt de référence n’auto-enregistre pas les commandes des packages dans bin/impulse. Comme pour les autres commandes Symfony Console d’ImpulsePHP, ajoutez explicitement celles du package dans le binaire de votre application :
use Impulse\Fixtures\Console\MakeFixtureCommand;
use Impulse\Fixtures\Console\RunFixturesCommand;
$app->addCommand(new MakeFixtureCommand());
$app->addCommand(new RunFixturesCommand());docs/installation.mddocs/usage.mddocs/cli.md
composer testMIT