function KernelTestBase::containerBuild

Sets up the base service container for this test.

Extend this method in your test to register additional service overrides that need to persist a DrupalKernel reboot. This method is called whenever the kernel is rebuilt.

See also

\Drupal\simpletest\KernelTestBase::setUp()

\Drupal\simpletest\KernelTestBase::enableModules()

\Drupal\simpletest\KernelTestBase::disableModules()

File

core/modules/simpletest/src/KernelTestBase.php, line 343

Class

KernelTestBase
Base class for functional integration tests.

Namespace

Drupal\simpletest

Code

public function containerBuild(ContainerBuilder $container) {
    // Keep the container object around for tests.
    $this->container = $container;
    // Set the default language on the minimal container.
    $this->container
        ->setParameter('language.default_values', $this->defaultLanguageData());
    $container->register('lock', 'Drupal\\Core\\Lock\\NullLockBackend');
    $container->register('cache_factory', 'Drupal\\Core\\Cache\\MemoryBackendFactory');
    $container->register('config.storage', 'Drupal\\Core\\Config\\DatabaseStorage')
        ->addArgument(Database::getConnection())
        ->addArgument('config');
    if ($this->strictConfigSchema) {
        $container->register('testing.config_schema_checker', ConfigSchemaChecker::class)
            ->addArgument(new Reference('config.typed'))
            ->addArgument($this->getConfigSchemaExclusions())
            ->addTag('event_subscriber');
    }
    $keyvalue_options = $container->getParameter('factory.keyvalue') ?: [];
    $keyvalue_options['default'] = 'keyvalue.memory';
    $container->setParameter('factory.keyvalue', $keyvalue_options);
    $container->set('keyvalue.memory', $this->keyValueFactory);
    if (!$container->has('keyvalue')) {
        // TestBase::setUp puts a completely empty container in
        // $this->container which is somewhat the mirror of the empty
        // environment being set up. Unit tests need not to waste time with
        // getting a container set up for them. Drupal Unit Tests might just get
        // away with a simple container holding the absolute bare minimum. When
        // a kernel is overridden then there's no need to re-register the keyvalue
        // service but when a test is happy with the superminimal container put
        // together here, it still might a keyvalue storage for anything using
        // \Drupal::state() -- that's why a memory service was added in the first
        // place.
        $container->register('settings', 'Drupal\\Core\\Site\\Settings')
            ->setFactoryClass('Drupal\\Core\\Site\\Settings')
            ->setFactoryMethod('getInstance');
        $container->register('keyvalue', 'Drupal\\Core\\KeyValueStore\\KeyValueFactory')
            ->addArgument(new Reference('service_container'))
            ->addArgument(new Parameter('factory.keyvalue'));
        $container->register('state', 'Drupal\\Core\\State\\State')
            ->addArgument(new Reference('keyvalue'));
    }
    if ($container->hasDefinition('path_alias.path_processor')) {
        // The alias-based processor requires the path_alias entity schema to be
        // installed, so we prevent it from being registered to the path processor
        // manager. We do this by removing the tags that the compiler pass looks
        // for. This means that the URL generator can safely be used within tests.
        $definition = $container->getDefinition('path_alias.path_processor');
        $definition->clearTag('path_processor_inbound')
            ->clearTag('path_processor_outbound');
    }
    if ($container->hasDefinition('password')) {
        $container->getDefinition('password')
            ->setArguments([
            1,
        ]);
    }
    // Register the stream wrapper manager.
    $container->register('stream_wrapper_manager', 'Drupal\\Core\\StreamWrapper\\StreamWrapperManager')
        ->addArgument(new Reference('module_handler'))
        ->addMethodCall('setContainer', [
        new Reference('service_container'),
    ]);
    $request = Request::create('/');
    $container->get('request_stack')
        ->push($request);
}

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