Weave Code
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

Symfony Bundle Test Laravel Package

nyholm/symfony-bundle-test

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup

  1. Installation:

    composer require --dev nyholm/symfony-bundle-test
    

    Add to your composer.json under require-dev:

    "extra": {
        "symfony-bundle-test": {
            "bundles": ["App\\MyBundle\\MyBundle"]
        }
    }
    
  2. First Use Case: Run a basic smoke test to verify your bundle loads correctly:

    ./vendor/bin/symfony-bundle-test
    

    This checks if your bundle can be instantiated and registered in a Symfony kernel.

  3. Where to Look First:

    • config/packages/test.yaml (if using Symfony Flex)
    • tests/Bundle/ (for custom test configurations)
    • vendor/nyholm/symfony-bundle-test/src/ (core logic and CLI commands)

Implementation Patterns

Workflow Integration

  1. CI/CD Pipeline: Add to your GitHub Actions/GitLab CI:

    - name: Test Bundle
      run: ./vendor/bin/symfony-bundle-test
    

    Run before PHPUnit/Behat to fail fast if the bundle is broken.

  2. Local Development: Use as a pre-commit hook (via husky or pre-commit) to catch bundle issues early:

    npx husky add .husky/pre-commit 'php vendor/bin/symfony-bundle-test'
    
  3. Multi-Bundle Projects: Configure extra.symfony-bundle-test.bundles in composer.json to test multiple bundles in one command:

    "extra": {
        "symfony-bundle-test": {
            "bundles": [
                "App\\Bundle1\\Bundle1",
                "App\\Bundle2\\Bundle2"
            ]
        }
    }
    
  4. Custom Test Environments: Extend the default test kernel by creating a custom test class:

    // tests/Bundle/CustomTestKernel.php
    use Nyholm\SymfonyBundleTest\TestKernel;
    
    class CustomTestKernel extends TestKernel
    {
        protected function getBundleClassNames(): array
        {
            return ['App\\MyBundle\\MyBundle', 'Symfony\\Bundle\\FrameworkBundle\\FrameworkBundle'];
        }
    }
    

    Then run:

    ./vendor/bin/symfony-bundle-test --kernel=CustomTestKernel
    

Gotchas and Tips

Pitfalls

  1. Missing Dependencies: The test fails silently if required bundles (e.g., FrameworkBundle) are missing. Fix: Ensure composer.json includes all dependencies listed in your bundle’s Resources/config/services.yaml.

  2. Kernel Configuration: If your bundle relies on environment variables (e.g., .env), the test runs in a clean environment. Fix: Mock dependencies or use a custom kernel with preloaded config:

    // tests/Bundle/CustomTestKernel.php
    protected function getEnv(): array
    {
        return ['APP_ENV' => 'test', 'DATABASE_URL' => 'sqlite:///:memory:'];
    }
    
  3. Circular Dependencies: The test may hang or fail if bundles have circular dependencies. Fix: Reorder bundles in getBundleClassNames() or refactor dependencies.

  4. Debugging Failures: Enable verbose output for detailed errors:

    ./vendor/bin/symfony-bundle-test -v
    

    Or run with --debug to see the full kernel boot process.

Tips

  1. Test Database Connections: Add a custom assertion to verify database connectivity:

    // tests/Bundle/DatabaseTest.php
    use Nyholm\SymfonyBundleTest\TestCase;
    
    class DatabaseTest extends TestCase
    {
        public function testDatabaseConnection()
        {
            $this->assertTrue($this->getContainer()->get('database_connection')->isConnected());
        }
    }
    
  2. Skip Tests: Exclude specific bundles temporarily:

    ./vendor/bin/symfony-bundle-test --exclude="App\\DebugBundle\\DebugBundle"
    
  3. Performance: Cache the test kernel to speed up repeated runs:

    ./vendor/bin/symfony-bundle-test --cache-dir=var/cache/bundle_test
    
  4. Extension Points: Override the default test case to add assertions:

    // tests/Bundle/TestCase.php
    use Nyholm\SymfonyBundleTest\TestCase as BaseTestCase;
    
    abstract class TestCase extends BaseTestCase
    {
        protected function assertServiceExists(string $id): void
        {
            $this->assertTrue($this->getContainer()->has($id), "Service {$id} not found.");
        }
    }
    
  5. Symfony Flex Projects: If using Symfony Flex, the package auto-detects bundles from config/bundles.php. Tip: Keep this file updated to avoid false negatives.

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.
emuniq/filament-browser-notifications
syriable/filament-translator
hungnm28/livewire-form
wenprise/eloquent
crudly/encrypted
fadion/bouncy
cuci/prototurk-sdk
gos/pubsub-router-bundle
cuci/prototurk-sdk-symfony
clementtalleu/easyadmin-markdown-bundle
codeflextech/permission-manager
karnoweb/livewire-datepicker
sayedenam/sayed-dashboard
milito/query-filter
apiboxsym/user-bundle
apiboxsym/health-check-bundle
jayeshmepani/jpl-moshier-ephemeris-php
elnasnato/laraliveui
labrodev/rest-sdk
sampaui/sampaui