diff --git a/core/modules/views/lib/Drupal/views/Tests/ViewsDataTest.php b/core/modules/views/lib/Drupal/views/Tests/ViewsDataTest.php
index ada38c0..62515a7 100644
--- a/core/modules/views/lib/Drupal/views/Tests/ViewsDataTest.php
+++ b/core/modules/views/lib/Drupal/views/Tests/ViewsDataTest.php
@@ -53,6 +53,24 @@ public function testViewsFetchData() {
     $data = $this->viewsDataCache->get();
     $this->assertTrue(isset($data[$table_name]), 'Make sure the views_test_data info appears in the total views data.');
     $this->assertEqual($data[$table_name], $expected_data[$table_name], 'Make sure the views_test_data has the expected values.');
+
+    // Verify that views_test_data_views_data() has only been called once.
+    $state = \Drupal::service('state');
+    $count = $state->get('views_test_data_views_data_count');
+
+    // Clear the storage/cache.
+    $this->viewsDataCache->clear();
+    // Get the data again.
+    $this->viewsDataCache->get($table_name);
+    // Verify that view_test_data_views_data() has run again.
+    $this->assertEqual($count + 1, $state->get('views_test_data_views_data_count'));
+
+    // Get the data again.
+    $this->viewsDataCache->get($table_name);
+    // Also request all table data.
+    $this->viewsDataCache->get();
+    // Verify that view_test_data_views_data() has not run again.
+    $this->assertEqual($count + 1, $state->get('views_test_data_views_data_count'));
   }
 
   /**
diff --git a/core/modules/views/lib/Drupal/views/ViewsDataCache.php b/core/modules/views/lib/Drupal/views/ViewsDataCache.php
index 15e338c..b087d0b 100644
--- a/core/modules/views/lib/Drupal/views/ViewsDataCache.php
+++ b/core/modules/views/lib/Drupal/views/ViewsDataCache.php
@@ -256,4 +256,11 @@ public function destruct() {
     }
   }
 
+  /**
+   * Clears the class storage and cache.
+   */
+  public function clear() {
+    $this->storage = array();
+    $this->cacheBackend->deleteAll();
+  }
 }
diff --git a/core/modules/views/tests/views_test_data/views_test_data.views.inc b/core/modules/views/tests/views_test_data/views_test_data.views.inc
index ff940f7..5acd403 100644
--- a/core/modules/views/tests/views_test_data/views_test_data.views.inc
+++ b/core/modules/views/tests/views_test_data/views_test_data.views.inc
@@ -25,7 +25,17 @@ function views_test_data_views_analyze(ViewExecutable $view) {
  * Implements hook_views_data().
  */
 function views_test_data_views_data() {
-  return state()->get('views_test_data_views_data');
+  $state = Drupal::service('state');
+  // We use a state variable to keep track of how many times this function is
+  // called so we can assert that calls to
+  // \Drupal\views\ViewsDataCache::delete() trigger a rebuild of views data.
+  if (!($count = $state->get('views_test_data_views_data_count'))) {
+    $count = 0;
+  }
+  $count++;
+  $state->set('views_test_data_views_data_count', $count);
+
+  return $state->get('views_test_data_views_data');
 }
 
 /**
