diff --git a/core/modules/jsonapi/tests/src/Functional/JsonApiRegressionTest.php b/core/modules/jsonapi/tests/src/Functional/JsonApiRegressionTest.php
index ee50246048d711b9f0a1b5f69b249625659fa81e..f17fba164ba0a66fece4a34c8d45861405a3663a 100644
--- a/core/modules/jsonapi/tests/src/Functional/JsonApiRegressionTest.php
+++ b/core/modules/jsonapi/tests/src/Functional/JsonApiRegressionTest.php
@@ -1027,43 +1027,6 @@ public function testRecursionDetectedWhenResponseContainsViolationsFrom3042124()
     $this->assertSame(sprintf('title: This value should not be null.'), $data['errors'][0]['detail']);
   }
 
-  /**
-   * Ensure that child comments can be retrieved via JSON:API.
-   */
-  public function testLeakedCacheMetadataViaRdfFromIssue3053827() {
-    $this->assertTrue($this->container->get('module_installer')->install(['comment', 'rdf'], TRUE), 'Installed modules.');
-    $this->addDefaultCommentField('node', 'article', 'comment', CommentItemInterface::OPEN, 'comment');
-    $this->rebuildAll();
-
-    // Create data.
-    Node::create([
-      'title' => 'Commented Node',
-      'type' => 'article',
-    ])->save();
-    $default_values = [
-      'entity_id' => 1,
-      'entity_type' => 'node',
-      'field_name' => 'comment',
-      'status' => 1,
-    ];
-    $parent = Comment::create(['subject' => 'Marlin'] + $default_values);
-    $parent->save();
-    $child = Comment::create(['subject' => 'Nemo', 'pid' => $parent->id()] + $default_values);
-    $child->save();
-
-    // Test.
-    $user = $this->drupalCreateUser(['access comments']);
-    $request_options = [
-      RequestOptions::AUTH => [
-        $user->getAccountName(),
-        $user->pass_raw,
-      ],
-    ];
-    // Requesting the comment collection should succeed.
-    $response = $this->request('GET', Url::fromUri('internal:/jsonapi/comment/comment'), $request_options);
-    $this->assertSame(200, $response->getStatusCode());
-  }
-
   /**
    * Ensure non-translatable entities can be PATCHed with an alternate language.
    *
diff --git a/core/modules/migrate_drupal_ui/tests/src/Functional/d6/Upgrade6Test.php b/core/modules/migrate_drupal_ui/tests/src/Functional/d6/Upgrade6Test.php
index 6a1dfc721430196a1442dc9f9ae759290d84cc29..fb85520432ba3d569b588648b7ebbd399aa7a194 100644
--- a/core/modules/migrate_drupal_ui/tests/src/Functional/d6/Upgrade6Test.php
+++ b/core/modules/migrate_drupal_ui/tests/src/Functional/d6/Upgrade6Test.php
@@ -25,7 +25,6 @@ class Upgrade6Test extends MigrateUpgradeExecuteTestBase {
     'forum',
     'language',
     'migrate_drupal_ui',
-    'rdf',
     'statistics',
     'telephone',
     'update',
@@ -54,9 +53,6 @@ protected function setUp(): void {
     $this->nodeStorage->delete($this->nodeStorage->loadMultiple());
 
     $this->loadFixture($this->getModulePath('migrate_drupal') . '/tests/fixtures/drupal6.php');
-
-    // @todo Remove this in https://www.drupal.org/node/3267515
-    \Drupal::service('module_installer')->uninstall(['rdf']);
   }
 
   /**
diff --git a/core/modules/migrate_drupal_ui/tests/src/Functional/d7/MultilingualReviewPageTest.php b/core/modules/migrate_drupal_ui/tests/src/Functional/d7/MultilingualReviewPageTest.php
index 50013aec856ee723cfc84ee60d4738c03684811d..80937f4765100385ab18a3246ecd097cef634086 100644
--- a/core/modules/migrate_drupal_ui/tests/src/Functional/d7/MultilingualReviewPageTest.php
+++ b/core/modules/migrate_drupal_ui/tests/src/Functional/d7/MultilingualReviewPageTest.php
@@ -26,7 +26,6 @@ class MultilingualReviewPageTest extends MultilingualReviewPageTestBase {
     'telephone',
     'book',
     'forum',
-    'rdf',
     'statistics',
     'syslog',
     'update',
@@ -41,9 +40,6 @@ class MultilingualReviewPageTest extends MultilingualReviewPageTestBase {
   protected function setUp(): void {
     parent::setUp();
     $this->loadFixture($this->getModulePath('migrate_drupal') . '/tests/fixtures/drupal7.php');
-
-    // @todo Remove this in https://www.drupal.org/node/3267515
-    \Drupal::service('module_installer')->uninstall(['rdf']);
   }
 
   /**
diff --git a/core/modules/migrate_drupal_ui/tests/src/Functional/d7/NoMultilingualReviewPageTest.php b/core/modules/migrate_drupal_ui/tests/src/Functional/d7/NoMultilingualReviewPageTest.php
index e3a5545b8f6057ffa6c13d69e4933b2c91d9e95c..1b15ca01845715aef8b4da86a2ca550a78b61145 100644
--- a/core/modules/migrate_drupal_ui/tests/src/Functional/d7/NoMultilingualReviewPageTest.php
+++ b/core/modules/migrate_drupal_ui/tests/src/Functional/d7/NoMultilingualReviewPageTest.php
@@ -27,7 +27,6 @@ class NoMultilingualReviewPageTest extends NoMultilingualReviewPageTestBase {
     'forum',
     'language',
     'migrate_drupal_ui',
-    'rdf',
     'statistics',
     'telephone',
   ];
@@ -38,9 +37,6 @@ class NoMultilingualReviewPageTest extends NoMultilingualReviewPageTestBase {
   protected function setUp(): void {
     parent::setUp();
     $this->loadFixture($this->getModulePath('migrate_drupal') . '/tests/fixtures/drupal7.php');
-
-    // @todo Remove this in https://www.drupal.org/node/3267515
-    \Drupal::service('module_installer')->uninstall(['rdf']);
   }
 
   /**
diff --git a/core/modules/migrate_drupal_ui/tests/src/Functional/d7/Upgrade7Test.php b/core/modules/migrate_drupal_ui/tests/src/Functional/d7/Upgrade7Test.php
index 68db192ff960d9869ab7ec7e79f861ca8883b802..894e718db29bc516aa67f360442bc0fa69df6a1e 100644
--- a/core/modules/migrate_drupal_ui/tests/src/Functional/d7/Upgrade7Test.php
+++ b/core/modules/migrate_drupal_ui/tests/src/Functional/d7/Upgrade7Test.php
@@ -28,7 +28,6 @@ class Upgrade7Test extends MigrateUpgradeExecuteTestBase {
     'forum',
     'language',
     'migrate_drupal_ui',
-    'rdf',
     'statistics',
     'telephone',
   ];
@@ -57,9 +56,6 @@ protected function setUp(): void {
     $this->nodeStorage->delete($this->nodeStorage->loadMultiple());
 
     $this->loadFixture($this->getModulePath('migrate_drupal') . '/tests/fixtures/drupal7.php');
-
-    // @todo Remove this in https://www.drupal.org/node/3267515
-    \Drupal::service('module_installer')->uninstall(['rdf']);
   }
 
   /**
diff --git a/core/modules/node/tests/modules/node_display_configurable_test/node_display_configurable_test.info.yml b/core/modules/rdf/tests/node_display_configurable_test/node_display_configurable_test.info.yml
similarity index 100%
rename from core/modules/node/tests/modules/node_display_configurable_test/node_display_configurable_test.info.yml
rename to core/modules/rdf/tests/node_display_configurable_test/node_display_configurable_test.info.yml
diff --git a/core/modules/node/tests/modules/node_display_configurable_test/node_display_configurable_test.module b/core/modules/rdf/tests/node_display_configurable_test/node_display_configurable_test.module
similarity index 100%
rename from core/modules/node/tests/modules/node_display_configurable_test/node_display_configurable_test.module
rename to core/modules/rdf/tests/node_display_configurable_test/node_display_configurable_test.module
diff --git a/core/modules/rdf/tests/src/Functional/Jsonapi/JsonApiRegressionTest.php b/core/modules/rdf/tests/src/Functional/Jsonapi/JsonApiRegressionTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..6abc4f6ac0582df96bad71c86fed58950fd5ffad
--- /dev/null
+++ b/core/modules/rdf/tests/src/Functional/Jsonapi/JsonApiRegressionTest.php
@@ -0,0 +1,66 @@
+<?php
+
+namespace Drupal\Tests\rdf\Functional\Jsonapi;
+
+use Drupal\comment\Entity\Comment;
+use Drupal\comment\Tests\CommentTestTrait;
+use Drupal\Core\Url;
+use Drupal\node\Entity\Node;
+use Drupal\Tests\jsonapi\Functional\JsonApiFunctionalTestBase;
+use GuzzleHttp\RequestOptions;
+
+/**
+ * JSON:API regression tests.
+ *
+ * @group jsonapi
+ * @group rdf
+ */
+class JsonApiRegressionTest extends JsonApiFunctionalTestBase {
+
+  use CommentTestTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $modules = [
+    'basic_auth',
+    'comment',
+    'rdf',
+  ];
+
+  /**
+   * Ensure that child comments can be retrieved via JSON:API.
+   */
+  public function testLeakedCacheMetadataViaRdfFromIssue3053827(): void {
+    $this->addDefaultCommentField('node', 'article');
+    $this->rebuildAll();
+
+    Node::create([
+      'title' => 'Commented Node',
+      'type' => 'article',
+    ])->save();
+    $default_values = [
+      'entity_id' => 1,
+      'entity_type' => 'node',
+      'field_name' => 'comment',
+      'status' => 1,
+    ];
+    $parent = Comment::create(['subject' => 'Marlin'] + $default_values);
+    $parent->save();
+    $child = Comment::create(['subject' => 'Nemo', 'pid' => $parent->id()] + $default_values);
+    $child->save();
+
+    $user = $this->drupalCreateUser(['access comments']);
+    $request_options = [
+      RequestOptions::AUTH => [
+        $user->getAccountName(),
+        $user->pass_raw,
+      ],
+    ];
+
+    // Requesting the comment collection should succeed.
+    $response = $this->request('GET', Url::fromUri('internal:/jsonapi/comment/comment'), $request_options);
+    $this->assertSame(200, $response->getStatusCode());
+  }
+
+}
diff --git a/core/modules/jsonapi/tests/src/Functional/RdfMappingTest.php b/core/modules/rdf/tests/src/Functional/Jsonapi/RdfMappingTest.php
similarity index 96%
rename from core/modules/jsonapi/tests/src/Functional/RdfMappingTest.php
rename to core/modules/rdf/tests/src/Functional/Jsonapi/RdfMappingTest.php
index 61e0f378ee1e5b6b80faf4ee4ab2b1fc470a1488..5906406863f243d19a4939475fe778c9adc09b72 100644
--- a/core/modules/jsonapi/tests/src/Functional/RdfMappingTest.php
+++ b/core/modules/rdf/tests/src/Functional/Jsonapi/RdfMappingTest.php
@@ -1,15 +1,17 @@
 <?php
 
-namespace Drupal\Tests\jsonapi\Functional;
+namespace Drupal\Tests\rdf\Functional\Jsonapi;
 
 use Drupal\Core\Url;
 use Drupal\node\Entity\NodeType;
 use Drupal\rdf\Entity\RdfMapping;
+use Drupal\Tests\jsonapi\Functional\ConfigEntityResourceTestBase;
 
 /**
  * JSON:API integration test for the "RdfMapping" config entity type.
  *
  * @group jsonapi
+ * @group rdf
  */
 class RdfMappingTest extends ConfigEntityResourceTestBase {
 
diff --git a/core/modules/node/tests/src/Functional/NodeDisplayConfigurableTest.php b/core/modules/rdf/tests/src/Functional/Node/NodeDisplayConfigurableTest.php
similarity index 97%
rename from core/modules/node/tests/src/Functional/NodeDisplayConfigurableTest.php
rename to core/modules/rdf/tests/src/Functional/Node/NodeDisplayConfigurableTest.php
index 9bec874fb1a3b92bb2d5128efa15ffb2d940c3c8..ae5d979011547a7deac95a15afe5e4dd3857e1af 100644
--- a/core/modules/node/tests/src/Functional/NodeDisplayConfigurableTest.php
+++ b/core/modules/rdf/tests/src/Functional/Node/NodeDisplayConfigurableTest.php
@@ -1,15 +1,17 @@
 <?php
 
-namespace Drupal\Tests\node\Functional;
+namespace Drupal\Tests\rdf\Functional\Node;
 
 use Drupal\Core\Entity\Entity\EntityViewDisplay;
 use Drupal\node\NodeInterface;
+use Drupal\Tests\node\Functional\NodeTestBase;
 use Drupal\user\UserInterface;
 
 /**
  * Tests making node base fields' displays configurable.
  *
  * @group node
+ * @group rdf
  */
 class NodeDisplayConfigurableTest extends NodeTestBase {
 
@@ -54,7 +56,7 @@ protected function setUp(): void {
    *
    * @dataProvider provideThemes
    */
-  public function testDisplayConfigurable(string $theme, string $metadata_region, bool $field_classes) {
+  public function testDisplayConfigurable(string $theme, string $metadata_region, bool $field_classes): void {
     // Change the node type setting to show submitted by information.
     $node_type = \Drupal::entityTypeManager()->getStorage('node_type')->load('page');
     $node_type->setDisplaySubmitted(TRUE);
diff --git a/core/modules/system/tests/modules/entity_test/entity_test.module b/core/modules/system/tests/modules/entity_test/entity_test.module
index 68b33b2ff7ff88891b93da937bd7acc5de90d3a5..52867f8508c9cb7032faeab6b5c8d814513e49c9 100644
--- a/core/modules/system/tests/modules/entity_test/entity_test.module
+++ b/core/modules/system/tests/modules/entity_test/entity_test.module
@@ -693,14 +693,18 @@ function entity_test_entity_prepare_view($entity_type, array $entities, array $d
     foreach ($entities as $entity) {
       /** @var \Drupal\Core\Entity\ContentEntityInterface $entity */
 
-      // Add a dummy field item attribute on field_test_text if it exists.
+      // Add field item attributes on field_test_text if it exists.
+      // See \Drupal\Tests\system\Functional\Entity\EntityViewControllerTest::testFieldItemAttributes().
       if ($entity->hasField('field_test_text') && $displays[$entity->bundle()]->getComponent('field_test_text')) {
         foreach ($entity->get('field_test_text') as $item) {
-          $item->_attributes += ['data-field-item-attr' => 'foobar'];
+          $item->_attributes += [
+            'data-field-item-attr' => 'foobar',
+            'property' => 'schema:text',
+          ];
         }
       }
 
-      // Add a dummy field item attribute on daterange fields if they exist.
+      // Add an item attribute on daterange fields if they exist.
       $fields = $entity->getFieldDefinitions();
       foreach ($fields as $field) {
         if ($field->getType() === 'daterange') {
diff --git a/core/modules/system/tests/src/Functional/Entity/EntityViewControllerTest.php b/core/modules/system/tests/src/Functional/Entity/EntityViewControllerTest.php
index 8ec23e044b3542745e33bcd2299e7b53fad486bd..363340f8e836ec65e13feae7dad20ae1f6f57a59 100644
--- a/core/modules/system/tests/src/Functional/Entity/EntityViewControllerTest.php
+++ b/core/modules/system/tests/src/Functional/Entity/EntityViewControllerTest.php
@@ -104,22 +104,6 @@ public function testFieldItemAttributes() {
     // Browse to the entity and verify that the attribute is rendered in the
     // field item HTML markup.
     $this->drupalGet('entity_test/' . $entity->id());
-    $this->assertSession()->elementTextEquals('xpath', '//div[@data-field-item-attr="foobar"]/p', $test_value);
-
-    // Enable the RDF module to ensure that two modules can add attributes to
-    // the same field item.
-    \Drupal::service('module_installer')->install(['rdf']);
-    $this->resetAll();
-
-    // Set an RDF mapping for the field_test_text field. This RDF mapping will
-    // be turned into RDFa attributes in the field item output.
-    $mapping = rdf_get_mapping('entity_test', 'entity_test');
-    $mapping->setFieldMapping('field_test_text', [
-      'properties' => ['schema:text'],
-    ])->save();
-    // Browse to the entity and verify that the attributes from both modules
-    // are rendered in the field item HTML markup.
-    $this->drupalGet('entity_test/' . $entity->id());
     $this->assertSession()->elementTextEquals('xpath', '//div[@data-field-item-attr="foobar" and @property="schema:text"]/p', $test_value);
   }