class KernelTestBaseTest

Same name in this branch
  1. 8.9.x core/tests/Drupal/KernelTests/KernelTestBaseTest.php \Drupal\KernelTests\KernelTestBaseTest
  2. 8.9.x core/tests/Drupal/Tests/Core/Test/KernelTestBaseTest.php \Drupal\Tests\Core\Test\KernelTestBaseTest
Same name in other branches
  1. 9 core/tests/Drupal/KernelTests/KernelTestBaseTest.php \Drupal\KernelTests\KernelTestBaseTest
  2. 10 core/modules/pgsql/tests/src/Kernel/pgsql/KernelTestBaseTest.php \Drupal\Tests\pgsql\Kernel\pgsql\KernelTestBaseTest
  3. 10 core/tests/Drupal/KernelTests/KernelTestBaseTest.php \Drupal\KernelTests\KernelTestBaseTest
  4. 11.x core/modules/pgsql/tests/src/Kernel/pgsql/KernelTestBaseTest.php \Drupal\Tests\pgsql\Kernel\pgsql\KernelTestBaseTest
  5. 11.x core/tests/Drupal/KernelTests/KernelTestBaseTest.php \Drupal\KernelTests\KernelTestBaseTest

Tests KernelTestBase functionality.

@group simpletest

Hierarchy

Expanded class hierarchy of KernelTestBaseTest

File

core/modules/simpletest/src/Tests/KernelTestBaseTest.php, line 16

Namespace

Drupal\simpletest\Tests
View source
class KernelTestBaseTest extends KernelTestBase {
    
    /**
     * Modules to enable.
     *
     * @var array
     */
    public static $modules = [
        'entity_test',
    ];
    
    /**
     * {@inheritdoc}
     */
    protected function setUp() {
        $php = <<<'EOS'
<?php
# Make sure that the $test_class variable is defined when this file is included.
if ($test_class) {
}

# Define a function to be able to check that this file was loaded with
# function_exists().
if (!function_exists('simpletest_test_stub_settings_function')) {
  function simpletest_test_stub_settings_function() {}
}
EOS;
        $settings_testing_file = $this->siteDirectory . '/settings.testing.php';
        file_put_contents($settings_testing_file, $php);
        $original_container = $this->originalContainer;
        parent::setUp();
        $this->assertNotIdentical(\Drupal::getContainer(), $original_container, 'KernelTestBase test creates a new container.');
    }
    
    /**
     * Tests expected behavior of setUp().
     */
    public function testSetUp() {
        $modules = [
            'entity_test',
        ];
        $table = 'entity_test';
        // Verify that specified $modules have been loaded.
        $this->assertTrue(function_exists('entity_test_entity_bundle_info'), 'entity_test.module was loaded.');
        // Verify that there is a fixed module list.
        $this->assertIdentical(array_keys(\Drupal::moduleHandler()->getModuleList()), $modules);
        $this->assertIdentical(\Drupal::moduleHandler()->getImplementations('entity_bundle_info'), [
            'entity_test',
        ]);
        $this->assertIdentical(\Drupal::moduleHandler()->getImplementations('entity_type_alter'), [
            'entity_test',
        ]);
        // Verify that no modules have been installed.
        $this->assertFalse(Database::getConnection()->schema()
            ->tableExists($table), "'{$table}' database table not found.");
        // Verify that the settings.testing.php got taken into account.
        $this->assertTrue(function_exists('simpletest_test_stub_settings_function'));
        // Ensure that the database tasks have been run during set up. Neither MySQL
        // nor SQLite make changes that are testable.
        $database = $this->container
            ->get('database');
        if ($database->driver() == 'pgsql') {
            $this->assertEqual('on', $database->query("SHOW standard_conforming_strings")
                ->fetchField());
            $this->assertEqual('escape', $database->query("SHOW bytea_output")
                ->fetchField());
        }
    }
    
    /**
     * Tests expected load behavior of enableModules().
     */
    public function testEnableModulesLoad() {
        $module = 'field_test';
        // Verify that the module does not exist yet.
        $this->assertFalse(\Drupal::moduleHandler()->moduleExists($module), "{$module} module not found.");
        $list = array_keys(\Drupal::moduleHandler()->getModuleList());
        $this->assertFalse(in_array($module, $list), "{$module} module not found in the extension handler's module list.");
        $list = \Drupal::moduleHandler()->getImplementations('entity_display_build_alter');
        $this->assertFalse(in_array($module, $list), "{$module}_entity_display_build_alter() in \\Drupal::moduleHandler()->getImplementations() not found.");
        // Enable the module.
        $this->enableModules([
            $module,
        ]);
        // Verify that the module exists.
        $this->assertTrue(\Drupal::moduleHandler()->moduleExists($module), "{$module} module found.");
        $list = array_keys(\Drupal::moduleHandler()->getModuleList());
        $this->assertTrue(in_array($module, $list), "{$module} module found in the extension handler's module list.");
        $list = \Drupal::moduleHandler()->getImplementations('query_efq_table_prefixing_test_alter');
        $this->assertTrue(in_array($module, $list), "{$module}_query_efq_table_prefixing_test_alter() in \\Drupal::moduleHandler()->getImplementations() found.");
    }
    
    /**
     * Tests expected installation behavior of enableModules().
     */
    public function testEnableModulesInstall() {
        $module = 'module_test';
        $table = 'module_test';
        // Verify that the module does not exist yet.
        $this->assertFalse(\Drupal::moduleHandler()->moduleExists($module), "{$module} module not found.");
        $list = array_keys(\Drupal::moduleHandler()->getModuleList());
        $this->assertFalse(in_array($module, $list), "{$module} module not found in the extension handler's module list.");
        $list = \Drupal::moduleHandler()->getImplementations('hook_info');
        $this->assertFalse(in_array($module, $list), "{$module}_hook_info() in \\Drupal::moduleHandler()->getImplementations() not found.");
        $this->assertFalse(Database::getConnection()->schema()
            ->tableExists($table), "'{$table}' database table not found.");
        // Install the module.
        \Drupal::service('module_installer')->install([
            $module,
        ]);
        // Verify that the enabled module exists.
        $this->assertTrue(\Drupal::moduleHandler()->moduleExists($module), "{$module} module found.");
        $list = array_keys(\Drupal::moduleHandler()->getModuleList());
        $this->assertTrue(in_array($module, $list), "{$module} module found in the extension handler's module list.");
        $list = \Drupal::moduleHandler()->getImplementations('hook_info');
        $this->assertTrue(in_array($module, $list), "{$module}_hook_info() in \\Drupal::moduleHandler()->getImplementations() found.");
        $this->assertTrue(Database::getConnection()->schema()
            ->tableExists($table), "'{$table}' database table found.");
        $schema = drupal_get_module_schema($module, $table);
        $this->assertTrue($schema, "'{$table}' table schema found.");
    }
    
    /**
     * Tests installing modules with DependencyInjection services.
     */
    public function testEnableModulesInstallContainer() {
        // Install Node module.
        $this->enableModules([
            'user',
            'field',
            'node',
        ]);
        $this->installEntitySchema('node', [
            'node',
            'node_field_data',
        ]);
        // Perform an entity query against node.
        $query = \Drupal::entityQuery('node');
        // Disable node access checks, since User module is not enabled.
        $query->accessCheck(FALSE);
        $query->condition('nid', 1);
        $query->execute();
        $this->pass('Entity field query was executed.');
    }
    
    /**
     * Tests expected behavior of installSchema().
     */
    public function testInstallSchema() {
        $module = 'entity_test';
        $table = 'entity_test_example';
        // Verify that we can install a table from the module schema.
        $this->installSchema($module, $table);
        $this->assertTrue(Database::getConnection()->schema()
            ->tableExists($table), "'{$table}' database table found.");
        // Verify that the schema is known to Schema API.
        $schema = drupal_get_module_schema($module, $table);
        $this->assertTrue($schema, "'{$table}' table schema found.");
        // Verify that a unknown table from an enabled module throws an error.
        $table = 'unknown_entity_test_table';
        try {
            $this->installSchema($module, $table);
            $this->fail('Exception for non-retrievable schema found.');
        } catch (\Exception $e) {
            $this->pass('Exception for non-retrievable schema found.');
        }
        $this->assertFalse(Database::getConnection()->schema()
            ->tableExists($table), "'{$table}' database table not found.");
        $schema = drupal_get_module_schema($module, $table);
        $this->assertFalse($schema, "'{$table}' table schema not found.");
        // Verify that a table from a unknown module cannot be installed.
        $module = 'database_test';
        $table = 'test';
        try {
            $this->installSchema($module, $table);
            $this->fail('Exception for non-retrievable schema found.');
        } catch (\Exception $e) {
            $this->pass('Exception for non-retrievable schema found.');
        }
        $this->assertFalse(Database::getConnection()->schema()
            ->tableExists($table), "'{$table}' database table not found.");
        $schema = drupal_get_module_schema($module, $table);
        $this->assertTrue($schema, "'{$table}' table schema found.");
        // Verify that the same table can be installed after enabling the module.
        $this->enableModules([
            $module,
        ]);
        $this->installSchema($module, $table);
        $this->assertTrue(Database::getConnection()->schema()
            ->tableExists($table), "'{$table}' database table found.");
        $schema = drupal_get_module_schema($module, $table);
        $this->assertTrue($schema, "'{$table}' table schema found.");
    }
    
    /**
     * Tests expected behavior of installEntitySchema().
     */
    public function testInstallEntitySchema() {
        $entity = 'entity_test';
        // The entity_test Entity has a field that depends on the User module.
        $this->enableModules([
            'user',
        ]);
        // Verity that the entity schema is created properly.
        $this->installEntitySchema($entity);
        $this->assertTrue(Database::getConnection()->schema()
            ->tableExists($entity), "'{$entity}' database table found.");
    }
    
    /**
     * Tests expected behavior of installConfig().
     */
    public function testInstallConfig() {
        // The user module has configuration that depends on system.
        $this->enableModules([
            'system',
        ]);
        $module = 'user';
        // Verify that default config can only be installed for enabled modules.
        try {
            $this->installConfig([
                $module,
            ]);
            $this->fail('Exception for non-enabled module found.');
        } catch (\Exception $e) {
            $this->pass('Exception for non-enabled module found.');
        }
        $this->assertFalse($this->container
            ->get('config.storage')
            ->exists('user.settings'));
        // Verify that default config can be installed.
        $this->enableModules([
            'user',
        ]);
        $this->installConfig([
            'user',
        ]);
        $this->assertTrue($this->container
            ->get('config.storage')
            ->exists('user.settings'));
        $this->assertTrue($this->config('user.settings')
            ->get('register'));
    }
    
    /**
     * Tests that the module list is retained after enabling/installing/disabling.
     */
    public function testEnableModulesFixedList() {
        // Install system module.
        $this->container
            ->get('module_installer')
            ->install([
            'system',
            'user',
            'menu_link_content',
        ]);
        $entity_manager = \Drupal::entityTypeManager();
        // entity_test is loaded via $modules; its entity type should exist.
        $this->assertEqual($this->container
            ->get('module_handler')
            ->moduleExists('entity_test'), TRUE);
        $this->assertTrue(TRUE == $entity_manager->getDefinition('entity_test'));
        // Load some additional modules; entity_test should still exist.
        $this->enableModules([
            'field',
            'text',
            'entity_test',
        ]);
        $this->assertEqual($this->container
            ->get('module_handler')
            ->moduleExists('entity_test'), TRUE);
        $this->assertTrue(TRUE == $entity_manager->getDefinition('entity_test'));
        // Install some other modules; entity_test should still exist.
        $this->container
            ->get('module_installer')
            ->install([
            'user',
            'field',
            'field_test',
        ], FALSE);
        $this->assertEqual($this->container
            ->get('module_handler')
            ->moduleExists('entity_test'), TRUE);
        $this->assertTrue(TRUE == $entity_manager->getDefinition('entity_test'));
        // Uninstall one of those modules; entity_test should still exist.
        $this->container
            ->get('module_installer')
            ->uninstall([
            'field_test',
        ]);
        $this->assertEqual($this->container
            ->get('module_handler')
            ->moduleExists('entity_test'), TRUE);
        $this->assertTrue(TRUE == $entity_manager->getDefinition('entity_test'));
        // Set the weight of a module; entity_test should still exist.
        module_set_weight('field', -1);
        $this->assertEqual($this->container
            ->get('module_handler')
            ->moduleExists('entity_test'), TRUE);
        $this->assertTrue(TRUE == $entity_manager->getDefinition('entity_test'));
        // Reactivate the previously uninstalled module.
        $this->enableModules([
            'field_test',
        ]);
        // Create a field.
        $this->installEntitySchema('entity_test');
        $display = EntityViewDisplay::create([
            'targetEntityType' => 'entity_test',
            'bundle' => 'entity_test',
            'mode' => 'default',
        ]);
        $field_storage = FieldStorageConfig::create([
            'field_name' => 'test_field',
            'entity_type' => 'entity_test',
            'type' => 'test_field',
        ]);
        $field_storage->save();
        FieldConfig::create([
            'field_storage' => $field_storage,
            'bundle' => 'entity_test',
        ])->save();
    }
    
    /**
     * Tests that ThemeManager works right after loading a module.
     */
    public function testEnableModulesTheme() {
        
        /** @var \Drupal\Core\Render\RendererInterface $renderer */
        $renderer = $this->container
            ->get('renderer');
        $original_element = $element = [
            '#type' => 'container',
            '#markup' => 'Foo',
            '#attributes' => [],
        ];
        $this->enableModules([
            'system',
        ]);
        // \Drupal\Core\Theme\ThemeManager::render() throws an exception if modules
        // are not loaded yet.
        $this->assertTrue($renderer->renderRoot($element));
        $element = $original_element;
        $this->disableModules([
            'entity_test',
        ]);
        $this->assertTrue($renderer->renderRoot($element));
    }
    
    /**
     * Tests that there is no theme by default.
     */
    public function testNoThemeByDefault() {
        $themes = $this->config('core.extension')
            ->get('theme');
        $this->assertEqual($themes, []);
        $extensions = $this->container
            ->get('config.storage')
            ->read('core.extension');
        $this->assertEqual($extensions['theme'], []);
        $active_theme = $this->container
            ->get('theme.manager')
            ->getActiveTheme();
        $this->assertEqual($active_theme->getName(), 'core');
    }
    
    /**
     * Tests that \Drupal::installProfile() returns NULL.
     *
     * As the currently active installation profile is used when installing
     * configuration, for example, this is essential to ensure test isolation.
     */
    public function testDrupalGetProfile() {
        $this->assertNull(\Drupal::installProfile());
    }
    
    /**
     * {@inheritdoc}
     */
    public function run(array $methods = []) {
        parent::run($methods);
        // Check that all tables of the test instance have been deleted. At this
        // point the original database connection is restored so we need to prefix
        // the tables.
        $connection = Database::getConnection();
        if ($connection->databaseType() != 'sqlite') {
            $tables = $connection->schema()
                ->findTables($this->databasePrefix . '%');
            $this->assertTrue(empty($tables), 'All test tables have been removed.');
        }
        else {
            // We don't have the test instance connection anymore so we have to
            // re-attach its database and then use the same query as
            // \Drupal\Core\Database\Driver\sqlite\Schema::findTables().
            // @see \Drupal\Core\Database\Driver\sqlite\Connection::__construct()
            $info = Database::getConnectionInfo();
            $connection->query('ATTACH DATABASE :database AS :prefix', [
                ':database' => $info['default']['database'] . '-' . $this->databasePrefix,
                ':prefix' => $this->databasePrefix,
            ]);
            $result = $connection->query("SELECT name FROM " . $this->databasePrefix . ".sqlite_master WHERE type = :type AND name LIKE :table_name AND name NOT LIKE :pattern", [
                ':type' => 'table',
                ':table_name' => '%',
                ':pattern' => 'sqlite_%',
            ])
                ->fetchAllKeyed(0, 0);
            $this->assertTrue(empty($result), 'All test tables have been removed.');
        }
    }

}

Members

Title Sort descending Deprecated Modifiers Object type Summary Overriden Title Overrides
AssertHelperTrait::castSafeStrings protected static function Casts MarkupInterface objects into strings.
ConfigTestTrait::configImporter protected function Returns a ConfigImporter object to import test configuration.
ConfigTestTrait::copyConfig protected function Copies configuration objects from source storage to target storage.
GeneratePermutationsTrait::generatePermutations public static function Converts a list of possible parameters into a stack of permutations.
KernelTestBase::$configDirectories protected property The configuration directories for this test run.
KernelTestBase::$keyValueFactory protected property A KeyValueMemoryFactory instance to use when building the container.
KernelTestBase::$moduleFiles private property
KernelTestBase::$streamWrappers protected property Array of registered stream wrappers.
KernelTestBase::$themeFiles private property
KernelTestBase::beforePrepareEnvironment protected function Act on global state information before the environment is altered for a test. Overrides TestBase::beforePrepareEnvironment
KernelTestBase::containerBuild public function Sets up the base service container for this test.
KernelTestBase::defaultLanguageData protected function Provides the data for setting the default language on the container.
KernelTestBase::disableModules protected function Disables modules for this test.
KernelTestBase::enableModules protected function Enables modules for this test.
KernelTestBase::installConfig protected function Installs default configuration for a given list of modules.
KernelTestBase::installEntitySchema protected function Installs the storage schema for a specific entity type.
KernelTestBase::installSchema protected function Installs a specific table from a module schema definition.
KernelTestBase::prepareConfigDirectories protected function Create and set new configuration directories.
KernelTestBase::registerStreamWrapper protected function Registers a stream wrapper for this test.
KernelTestBase::render protected function Renders a render array.
KernelTestBase::tearDown protected function Performs cleanup tasks after each individual test method has been run. Overrides TestBase::tearDown 1
KernelTestBase::__construct public function Constructor for Test. Overrides TestBase::__construct
KernelTestBaseTest::$modules public static property Modules to enable. Overrides KernelTestBase::$modules
KernelTestBaseTest::run public function Run all tests in this class. Overrides TestBase::run
KernelTestBaseTest::setUp protected function Performs setup tasks before each individual test method is run. Overrides KernelTestBase::setUp
KernelTestBaseTest::testDrupalGetProfile public function Tests that \Drupal::installProfile() returns NULL.
KernelTestBaseTest::testEnableModulesFixedList public function Tests that the module list is retained after enabling/installing/disabling.
KernelTestBaseTest::testEnableModulesInstall public function Tests expected installation behavior of enableModules().
KernelTestBaseTest::testEnableModulesInstallContainer public function Tests installing modules with DependencyInjection services.
KernelTestBaseTest::testEnableModulesLoad public function Tests expected load behavior of enableModules().
KernelTestBaseTest::testEnableModulesTheme public function Tests that ThemeManager works right after loading a module.
KernelTestBaseTest::testInstallConfig public function Tests expected behavior of installConfig().
KernelTestBaseTest::testInstallEntitySchema public function Tests expected behavior of installEntitySchema().
KernelTestBaseTest::testInstallSchema public function Tests expected behavior of installSchema().
KernelTestBaseTest::testNoThemeByDefault public function Tests that there is no theme by default.
KernelTestBaseTest::testSetUp public function Tests expected behavior of setUp().
RandomGeneratorTrait::$randomGenerator protected property The random generator.
RandomGeneratorTrait::getRandomGenerator protected function Gets the random generator for the utility methods.
RandomGeneratorTrait::randomMachineName protected function Generates a unique random string containing letters and numbers. 1
RandomGeneratorTrait::randomObject public function Generates a random PHP object.
RandomGeneratorTrait::randomString public function Generates a pseudo-random string of ASCII characters of codes 32 to 126.
RandomGeneratorTrait::randomStringValidate public function Callback for random string validation.
StorageCopyTrait::replaceStorageContents protected static function Copy the configuration from one storage to another and remove stale items.
TestBase::$assertions protected property Assertions thrown in that test case.
TestBase::$configImporter protected property The config importer that can used in a test.
TestBase::$databasePrefix protected property The database prefix of this test run.
TestBase::$dieOnFail public property Whether to die in case any test assertion fails.
TestBase::$httpAuthCredentials protected property HTTP authentication credentials (&lt;username&gt;:&lt;password&gt;).
TestBase::$httpAuthMethod protected property HTTP authentication method (specified as a CURLAUTH_* constant).
TestBase::$originalConf protected property The original configuration (variables), if available.
TestBase::$originalConfig protected property The original configuration (variables).
TestBase::$originalConfigDirectories protected property The original configuration directories.
TestBase::$originalContainer protected property The original container.
TestBase::$originalFileDirectory protected property The original file directory, before it was changed for testing purposes.
TestBase::$originalLanguage protected property The original language.
TestBase::$originalPrefix protected property The original database prefix when running inside Simpletest.
TestBase::$originalSessionName protected property The name of the session cookie of the test-runner.
TestBase::$originalSettings protected property The settings array.
TestBase::$originalShutdownCallbacks protected property The original array of shutdown function callbacks. 1
TestBase::$originalUser protected property The original user, before testing began. 1
TestBase::$results public property Current results of this test case.
TestBase::$skipClasses protected property This class is skipped when looking for the source of an assertion.
TestBase::$timeLimit protected property Time limit for the test.
TestBase::$translationFilesDirectory protected property The translation file directory for the test environment.
TestBase::$verbose public property TRUE if verbose debugging is enabled.
TestBase::$verboseClassName protected property Safe class name for use in verbose output filenames.
TestBase::$verboseDirectory protected property Directory where verbose output files are put.
TestBase::$verboseDirectoryUrl protected property URL to the verbose output file directory.
TestBase::$verboseId protected property Incrementing identifier for verbose output filenames.
TestBase::assert protected function Internal helper: stores the assert.
TestBase::assertEqual protected function Check to see if two values are equal.
TestBase::assertErrorLogged protected function Asserts that a specific error has been logged to the PHP error log.
TestBase::assertFalse protected function Check to see if a value is false.
TestBase::assertIdentical protected function Check to see if two values are identical.
TestBase::assertIdenticalObject protected function Checks to see if two objects are identical.
TestBase::assertNoErrorsLogged protected function Asserts that no errors have been logged to the PHP error.log thus far.
TestBase::assertNotEqual protected function Check to see if two values are not equal.
TestBase::assertNotIdentical protected function Check to see if two values are not identical.
TestBase::assertNotNull protected function Check to see if a value is not NULL.
TestBase::assertNull protected function Check to see if a value is NULL.
TestBase::assertTrue protected function Check to see if a value is not false.
TestBase::checkRequirements protected function Checks the matching requirements for Test. 1
TestBase::checkTestHierarchyMismatch public function Fail the test if it belongs to a PHPUnit-based framework.
TestBase::config protected function Configuration accessor for tests. Returns non-overridden configuration.
TestBase::deleteAssert public static function Delete an assertion record by message ID.
TestBase::error protected function Fire an error assertion. 1
TestBase::errorHandler public function Handle errors during test runs.
TestBase::exceptionHandler protected function Handle exceptions.
TestBase::fail protected function Fire an assertion that is always negative.
TestBase::filePreDeleteCallback public static function Ensures test files are deletable.
TestBase::getAssertionCall protected function Cycles through backtrace until the first non-assertion method is found.
TestBase::getDatabasePrefix public function Gets the database prefix.
TestBase::getTempFilesDirectory public function Gets the temporary files directory.
TestBase::insertAssert Deprecated public static function Store an assertion from outside the testing context. 1
TestBase::pass protected function Fire an assertion that is always positive.
TestBase::prepareDatabasePrefix private function Generates a database prefix for running tests. Overrides TestSetupTrait::prepareDatabasePrefix
TestBase::prepareEnvironment private function Prepares the current environment for running the test.
TestBase::restoreEnvironment private function Cleans up the test environment and restores the original environment.
TestBase::settingsSet protected function Changes in memory settings.
TestBase::storeAssertion protected function Helper method to store an assertion record in the configured database. 1
TestBase::verbose protected function Logs a verbose message in a text file.
TestSetupTrait::$configSchemaCheckerExclusions protected static property An array of config object names that are excluded from schema checking.
TestSetupTrait::$container protected property The dependency injection container used in the test.
TestSetupTrait::$kernel protected property The DrupalKernel instance used in the test.
TestSetupTrait::$originalSite protected property The site directory of the original parent site.
TestSetupTrait::$privateFilesDirectory protected property The private file directory for the test environment.
TestSetupTrait::$publicFilesDirectory protected property The public file directory for the test environment.
TestSetupTrait::$siteDirectory protected property The site directory of this test run.
TestSetupTrait::$strictConfigSchema protected property Set to TRUE to strict check all configuration saved. 2
TestSetupTrait::$tempFilesDirectory protected property The temporary file directory for the test environment.
TestSetupTrait::$testId protected property The test run ID.
TestSetupTrait::changeDatabasePrefix protected function Changes the database connection to the prefixed one.
TestSetupTrait::getConfigSchemaExclusions protected function Gets the config schema exclusions for this test.
TestSetupTrait::getDatabaseConnection public static function Returns the database connection to the site running Simpletest.

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