diff --git a/core/modules/system/src/Tests/Update/UpdatePathTestBase.php b/core/modules/system/src/Tests/Update/UpdatePathTestBase.php
index fc8d4c3..b5e8784 100644
--- a/core/modules/system/src/Tests/Update/UpdatePathTestBase.php
+++ b/core/modules/system/src/Tests/Update/UpdatePathTestBase.php
@@ -243,6 +243,7 @@ protected function runUpdates() {
     ]]]);
 
     $this->drupalGet($this->updateUrl);
+    $this->doPreUpdateTests();
     $this->clickLink(t('Continue'));
 
     // Run the update hooks.
@@ -266,4 +267,12 @@ protected function runUpdates() {
     $this->assertFalse(\Drupal::service('entity.definition_update_manager')->needsUpdates(), 'After all updates ran, entity schema is up to date.');
   }
 
+  /**
+   * Tests update.php before tests are run.
+   */
+  protected function doPreUpdateTests() {
+    // No-op. Tests wishing to do tests at the update.php URL before updates are
+    // run can override this method and implement their required tests.
+  }
+
 }
diff --git a/core/modules/system/src/Tests/Update/UpdatePathTestJavaScriptTest.php b/core/modules/system/src/Tests/Update/UpdatePathTestJavaScriptTest.php
new file mode 100644
index 0000000..74dc424
--- /dev/null
+++ b/core/modules/system/src/Tests/Update/UpdatePathTestJavaScriptTest.php
@@ -0,0 +1,43 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\system\Tests\Update\UpdatePathTestJavaScriptTest.php
+ */
+
+namespace Drupal\system\Tests\Update;
+
+/**
+ * Tests the presence of JavaScript at update.php.
+ *
+ * @group Update
+ */
+class UpdatePathTestJavaScriptTest extends UpdatePathTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setDatabaseDumpFiles() {
+    $this->databaseDumpFiles = [
+      __DIR__ . '/../../../tests/fixtures/update/drupal-8.bare.standard.php.gz',
+       __DIR__ . '/../../../tests/fixtures/update/drupal-8.update-test-aggregation-disabled.php',
+    ];
+  }
+
+  /**
+   * Test JavaScript loading at update.php.
+   *
+   * @see ::doPreUpdateTests
+   */
+  public function testJavaScriptLoading() {
+    $this->runUpdates();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function doPreUpdateTests() {
+    $this->assertRaw('core/misc/drupalSettingsLoader.js', 'Drupal settings found.');
+  }
+
+}
diff --git a/core/modules/system/tests/fixtures/update/drupal-8.update-test-aggregation-disabled.php b/core/modules/system/tests/fixtures/update/drupal-8.update-test-aggregation-disabled.php
new file mode 100644
index 0000000..5a6bed6
--- /dev/null
+++ b/core/modules/system/tests/fixtures/update/drupal-8.update-test-aggregation-disabled.php
@@ -0,0 +1,27 @@
+<?php
+
+/**
+ * @file
+ * Partial database to disable aggregation.
+ */
+
+use Drupal\Core\Database\Database;
+
+$connection = Database::getConnection();
+
+// Update cache settings.
+$cache_settings = $connection->select('config')
+  ->fields('config', ['data'])
+  ->condition('collection', '')
+  ->condition('name', 'system.performance')
+  ->execute()
+  ->fetchField();
+$cache_settings = unserialize($cache_settings);
+$cache_settings['js']['preprocess'] = FALSE;
+$connection->update('config')
+  ->fields([
+    'data' => serialize($cache_settings),
+  ])
+  ->condition('collection', '')
+  ->condition('name', 'system.performance')
+  ->execute();
