ServiceDestructionTest.php

Same filename in other branches
  1. 8.9.x core/tests/Drupal/KernelTests/Core/DrupalKernel/ServiceDestructionTest.php
  2. 10 core/tests/Drupal/KernelTests/Core/DrupalKernel/ServiceDestructionTest.php
  3. 11.x core/tests/Drupal/KernelTests/Core/DrupalKernel/ServiceDestructionTest.php

Namespace

Drupal\KernelTests\Core\DrupalKernel

File

core/tests/Drupal/KernelTests/Core/DrupalKernel/ServiceDestructionTest.php

View source
<?php

namespace Drupal\KernelTests\Core\DrupalKernel;

use Drupal\KernelTests\KernelTestBase;
use Symfony\Component\HttpFoundation\Response;

/**
 * Tests that services are correctly destructed.
 *
 * @group DrupalKernel
 */
class ServiceDestructionTest extends KernelTestBase {
    
    /**
     * Verifies that services are destructed when used.
     */
    public function testDestructionUsed() {
        // Enable the test module to add it to the container.
        $this->enableModules([
            'service_provider_test',
        ]);
        $request = $this->container
            ->get('request_stack')
            ->getCurrentRequest();
        $kernel = $this->container
            ->get('kernel');
        $kernel->preHandle($request);
        // The service has not been destructed yet.
        $this->assertNull(\Drupal::state()->get('service_provider_test.destructed'));
        // Call the class and then terminate the kernel
        $this->container
            ->get('service_provider_test_class');
        $response = new Response();
        $kernel->terminate($request, $response);
        $this->assertTrue(\Drupal::state()->get('service_provider_test.destructed'));
    }
    
    /**
     * Verifies that services are not unnecessarily destructed when not used.
     */
    public function testDestructionUnused() {
        // Enable the test module to add it to the container.
        $this->enableModules([
            'service_provider_test',
        ]);
        $request = $this->container
            ->get('request_stack')
            ->getCurrentRequest();
        $kernel = $this->container
            ->get('kernel');
        $kernel->preHandle($request);
        // The service has not been destructed yet.
        $this->assertNull(\Drupal::state()->get('service_provider_test.destructed'));
        // Terminate the kernel. The test class has not been called, so it should not
        // be destructed.
        $response = new Response();
        $kernel->terminate($request, $response);
        $this->assertNull(\Drupal::state()->get('service_provider_test.destructed'));
    }

}

Classes

Title Deprecated Summary
ServiceDestructionTest Tests that services are correctly destructed.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.