diff --git a/devel.routing.yml b/devel.routing.yml
index bfbb70c3e44b8bd675dec54a7f9a36cb16dc596c..d96092bd4943c436ddd4d93ff69e3adef8fa4544 100644
--- a/devel.routing.yml
+++ b/devel.routing.yml
@@ -19,8 +19,8 @@ devel.reinstall:
 devel.menu_rebuild:
   path: '/devel/menu/reset'
   defaults:
-    _form: '\Drupal\devel\Form\DevelRebuildMenus'
-    _title: 'Rebuild menus'
+    _form: '\Drupal\devel\Form\RouterRebuildConfirmForm'
+    _title: 'Rebuild router'
   options:
     _admin_route: TRUE
   requirements:
diff --git a/src/Form/DevelRebuildMenus.php b/src/Form/RouterRebuildConfirmForm.php
similarity index 77%
rename from src/Form/DevelRebuildMenus.php
rename to src/Form/RouterRebuildConfirmForm.php
index 0fb26e626270bdf77a332d0954409d8547fb0d84..a1daf8977b867d00bd2dd7a4fc8d8575e8d3a2ef 100644
--- a/src/Form/DevelRebuildMenus.php
+++ b/src/Form/RouterRebuildConfirmForm.php
@@ -11,7 +11,7 @@ use Symfony\Component\DependencyInjection\ContainerInterface;
 /**
  * Provides confirmation form for rebuilding the routes.
  */
-class DevelRebuildMenus extends ConfirmFormBase {
+class RouterRebuildConfirmForm extends ConfirmFormBase {
 
   /**
    * The route builder service.
@@ -21,7 +21,7 @@ class DevelRebuildMenus extends ConfirmFormBase {
   protected $routeBuilder;
 
   /**
-   * Constructs a new DevelRebuildMenus object.
+   * Constructs a new RouterRebuildConfirmForm object.
    *
    * @param \Drupal\Core\Routing\RouteBuilderInterface $route_builder
    *   The route builder service.
@@ -50,7 +50,7 @@ class DevelRebuildMenus extends ConfirmFormBase {
    * {@inheritdoc}
    */
   public function getQuestion() {
-    return $this->t('Are you sure you want to rebuild menus?');
+    return $this->t('Are you sure you want to rebuild the router?');
   }
 
   /**
@@ -64,7 +64,7 @@ class DevelRebuildMenus extends ConfirmFormBase {
    * {@inheritdoc}
    */
   public function getDescription() {
-    return $this->t('Rebuild menu based on hook_menu() and revert any custom changes. All menu items return to their default settings.');
+    return $this->t('Rebuilds the routes information gathering all routing data from .routing.yml files and from classes which subscribe to the route build events. This action cannot be undone.');
   }
 
   /**
@@ -79,7 +79,7 @@ class DevelRebuildMenus extends ConfirmFormBase {
    */
   public function submitForm(array &$form, FormStateInterface $form_state) {
     $this->routeBuilder->rebuild();
-    drupal_set_message($this->t('The menu router has been rebuilt.'));
+    drupal_set_message($this->t('The router has been rebuilt.'));
     $form_state->setRedirect('<front>');
   }
 
diff --git a/src/Tests/DevelRebuildMenusTest.php b/src/Tests/DevelRebuildMenusTest.php
deleted file mode 100644
index 95abf19d27ed5e5dc4b12b8e7e9a5771114b3829..0000000000000000000000000000000000000000
--- a/src/Tests/DevelRebuildMenusTest.php
+++ /dev/null
@@ -1,41 +0,0 @@
-<?php
-
-namespace Drupal\devel\Tests;
-
-use Drupal\simpletest\WebTestBase;
-
-/**
- * Tests routes rebuild.
- *
- * @group devel
- */
-class DevelRebuildMenusTest extends WebTestBase {
-
-  /**
-   * Modules to enable.
-   *
-   * @var array
-   */
-  public static $modules = array('devel');
-
-  /**
-   * Set up test.
-   */
-  protected function setUp() {
-    parent::setUp();
-
-    $web_user = $this->drupalCreateUser(array('administer site configuration'));
-    $this->drupalLogin($web_user);
-  }
-
-  /**
-   * Test routes rebuild.
-   */
-  public function testDevelRebuildMenus() {
-    $this->drupalGet('devel/menu/reset');
-    $this->assertResponse(200);
-    $this->drupalPostForm('devel/menu/reset', array(), t('Rebuild'));
-    $this->assertText(t('The menu router has been rebuilt.'));
-  }
-
-}
diff --git a/tests/modules/devel_test/devel_test.services.yml b/tests/modules/devel_test/devel_test.services.yml
new file mode 100644
index 0000000000000000000000000000000000000000..17fc2194a7e3ccddde216a95bb8b42fdc9ec5823
--- /dev/null
+++ b/tests/modules/devel_test/devel_test.services.yml
@@ -0,0 +1,6 @@
+services:
+
+  devel_test.test_route_subscriber:
+    class: Drupal\devel_test\Routing\TestRouteSubscriber
+    tags:
+      - { name: event_subscriber }
diff --git a/tests/modules/devel_test/src/Routing/TestRouteSubscriber.php b/tests/modules/devel_test/src/Routing/TestRouteSubscriber.php
new file mode 100644
index 0000000000000000000000000000000000000000..1bf9332817810d07d96f7d1ff5a2387615835743
--- /dev/null
+++ b/tests/modules/devel_test/src/Routing/TestRouteSubscriber.php
@@ -0,0 +1,20 @@
+<?php
+
+namespace Drupal\devel_test\Routing;
+
+use Drupal\Core\Routing\RouteSubscriberBase;
+use Symfony\Component\Routing\RouteCollection;
+
+/**
+ * Router subscriber class for testing purpose.
+ */
+class TestRouteSubscriber extends RouteSubscriberBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function alterRoutes(RouteCollection $collection) {
+    \Drupal::state()->set('devel_test_route_rebuild','Router rebuild fired');
+  }
+
+}
diff --git a/tests/src/Functional/DevelRouterRebuildTest.php b/tests/src/Functional/DevelRouterRebuildTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..58436a896f1a7d8acb9289d8c542a3c49c9a50f8
--- /dev/null
+++ b/tests/src/Functional/DevelRouterRebuildTest.php
@@ -0,0 +1,46 @@
+<?php
+
+namespace Drupal\Tests\devel\Functional;
+
+use Drupal\Tests\BrowserTestBase;
+
+/**
+ * Tests routes rebuild.
+ *
+ * @group devel
+ */
+class DevelRouterRebuildTest extends BrowserTestBase {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = ['devel', 'devel_test'];
+
+  /**
+   * Test routes rebuild.
+   */
+  public function testRouterRebuildConfirmForm() {
+    // Reset the state flag.
+    \Drupal::state()->set('devel_test_route_rebuild', NULL);
+
+    $this->drupalGet('devel/menu/reset');
+    $this->assertSession()->statusCodeEquals(403);
+
+    $web_user = $this->drupalCreateUser(['administer site configuration']);
+    $this->drupalLogin($web_user);
+
+    $this->drupalGet('devel/menu/reset');
+    $this->assertSession()->statusCodeEquals(200);
+    $this->assertSession()->pageTextContains('Are you sure you want to rebuild the router?');
+    $route_rebuild_state = \Drupal::state()->get('devel_test_route_rebuild');
+    $this->assertEmpty($route_rebuild_state);
+
+    $this->drupalPostForm('devel/menu/reset', [], t('Rebuild'));
+    $this->assertSession()->pageTextContains('The router has been rebuilt.');
+    $route_rebuild_state = \Drupal::state()->get('devel_test_route_rebuild');
+    $this->assertEquals('Router rebuild fired', $route_rebuild_state);
+  }
+
+}