diff --git a/core/modules/hal/tests/src/Functional/EntityResource/EntityViewMode/EntityViewModeHalJsonAnonTest.php b/core/modules/hal/tests/src/Functional/EntityResource/EntityViewMode/EntityViewModeHalJsonAnonTest.php
new file mode 100644
index 0000000..d1d4a74
--- /dev/null
+++ b/core/modules/hal/tests/src/Functional/EntityResource/EntityViewMode/EntityViewModeHalJsonAnonTest.php
@@ -0,0 +1,30 @@
+<?php
+
+namespace Drupal\Tests\hal\Functional\EntityResource\EntityViewMode;
+
+use Drupal\Tests\rest\Functional\AnonResourceTestTrait;
+use Drupal\Tests\rest\Functional\EntityResource\EntityViewMode\EntityViewModeResourceTestBase;
+
+/**
+ * @group hal
+ */
+class EntityViewModeHalJsonAnonTest extends EntityViewModeResourceTestBase {
+
+  use AnonResourceTestTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = ['hal'];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $format = 'hal_json';
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $mimeType = 'application/hal+json';
+
+}
diff --git a/core/modules/hal/tests/src/Functional/EntityResource/EntityViewMode/EntityViewModeHalJsonBasicAuthTest.php b/core/modules/hal/tests/src/Functional/EntityResource/EntityViewMode/EntityViewModeHalJsonBasicAuthTest.php
new file mode 100644
index 0000000..a79c3fd
--- /dev/null
+++ b/core/modules/hal/tests/src/Functional/EntityResource/EntityViewMode/EntityViewModeHalJsonBasicAuthTest.php
@@ -0,0 +1,35 @@
+<?php
+
+namespace Drupal\Tests\hal\Functional\EntityResource\EntityViewMode;
+
+use Drupal\Tests\rest\Functional\BasicAuthResourceTestTrait;
+use Drupal\Tests\rest\Functional\EntityResource\EntityViewMode\EntityViewModeResourceTestBase;
+
+/**
+ * @group hal
+ */
+class EntityViewModeHalJsonBasicAuthTest extends EntityViewModeResourceTestBase {
+
+  use BasicAuthResourceTestTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = ['hal', 'basic_auth'];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $format = 'hal_json';
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $mimeType = 'application/hal+json';
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $auth = 'basic_auth';
+
+}
diff --git a/core/modules/hal/tests/src/Functional/EntityResource/EntityViewMode/EntityViewModeHalJsonCookieTest.php b/core/modules/hal/tests/src/Functional/EntityResource/EntityViewMode/EntityViewModeHalJsonCookieTest.php
new file mode 100644
index 0000000..493de9a
--- /dev/null
+++ b/core/modules/hal/tests/src/Functional/EntityResource/EntityViewMode/EntityViewModeHalJsonCookieTest.php
@@ -0,0 +1,35 @@
+<?php
+
+namespace Drupal\Tests\hal\Functional\EntityResource\EntityViewMode;
+
+use Drupal\Tests\rest\Functional\CookieResourceTestTrait;
+use Drupal\Tests\rest\Functional\EntityResource\EntityViewMode\EntityViewModeResourceTestBase;
+
+/**
+ * @group hal
+ */
+class EntityViewModeHalJsonCookieTest extends EntityViewModeResourceTestBase {
+
+  use CookieResourceTestTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = ['hal'];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $format = 'hal_json';
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $mimeType = 'application/hal+json';
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $auth = 'cookie';
+
+}
diff --git a/core/modules/rest/tests/src/Functional/EntityResource/EntityViewMode/EntityViewModeJsonAnonTest.php b/core/modules/rest/tests/src/Functional/EntityResource/EntityViewMode/EntityViewModeJsonAnonTest.php
new file mode 100644
index 0000000..b74b825
--- /dev/null
+++ b/core/modules/rest/tests/src/Functional/EntityResource/EntityViewMode/EntityViewModeJsonAnonTest.php
@@ -0,0 +1,24 @@
+<?php
+
+namespace Drupal\Tests\rest\Functional\EntityResource\EntityViewMode;
+
+use Drupal\Tests\rest\Functional\AnonResourceTestTrait;
+
+/**
+ * @group rest
+ */
+class EntityViewModeJsonAnonTest extends EntityViewModeResourceTestBase {
+
+  use AnonResourceTestTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $format = 'json';
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $mimeType = 'application/json';
+
+}
diff --git a/core/modules/rest/tests/src/Functional/EntityResource/EntityViewMode/EntityViewModeJsonBasicAuthTest.php b/core/modules/rest/tests/src/Functional/EntityResource/EntityViewMode/EntityViewModeJsonBasicAuthTest.php
new file mode 100644
index 0000000..986b31d
--- /dev/null
+++ b/core/modules/rest/tests/src/Functional/EntityResource/EntityViewMode/EntityViewModeJsonBasicAuthTest.php
@@ -0,0 +1,34 @@
+<?php
+
+namespace Drupal\Tests\rest\Functional\EntityResource\EntityViewMode;
+
+use Drupal\Tests\rest\Functional\BasicAuthResourceTestTrait;
+
+/**
+ * @group rest
+ */
+class EntityViewModeJsonBasicAuthTest extends EntityViewModeResourceTestBase {
+
+  use BasicAuthResourceTestTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = ['basic_auth'];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $format = 'json';
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $mimeType = 'application/json';
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $auth = 'basic_auth';
+
+}
diff --git a/core/modules/rest/tests/src/Functional/EntityResource/EntityViewMode/EntityViewModeJsonCookieTest.php b/core/modules/rest/tests/src/Functional/EntityResource/EntityViewMode/EntityViewModeJsonCookieTest.php
new file mode 100644
index 0000000..78822f5
--- /dev/null
+++ b/core/modules/rest/tests/src/Functional/EntityResource/EntityViewMode/EntityViewModeJsonCookieTest.php
@@ -0,0 +1,29 @@
+<?php
+
+namespace Drupal\Tests\rest\Functional\EntityResource\EntityViewMode;
+
+use Drupal\Tests\rest\Functional\CookieResourceTestTrait;
+
+/**
+ * @group rest
+ */
+class EntityViewModeJsonCookieTest extends EntityViewModeResourceTestBase {
+
+  use CookieResourceTestTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $format = 'json';
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $mimeType = 'application/json';
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $auth = 'cookie';
+
+}
diff --git a/core/modules/rest/tests/src/Functional/EntityResource/EntityViewMode/EntityViewModeResourceTestBase.php b/core/modules/rest/tests/src/Functional/EntityResource/EntityViewMode/EntityViewModeResourceTestBase.php
new file mode 100644
index 0000000..28cb9b0
--- /dev/null
+++ b/core/modules/rest/tests/src/Functional/EntityResource/EntityViewMode/EntityViewModeResourceTestBase.php
@@ -0,0 +1,74 @@
+<?php
+
+namespace Drupal\Tests\rest\Functional\EntityResource\EntityViewMode;
+
+use Drupal\Tests\rest\Functional\EntityResource\EntityResourceTestBase;
+use Drupal\Core\Entity\Entity\EntityViewMode;
+
+abstract class EntityViewModeResourceTestBase extends EntityResourceTestBase {
+
+  /**
+   * {@inheritdoc}
+   *
+   * @todo: Remove 'field_ui' when https://www.drupal.org/node/2867266.
+   */
+  public static $modules = ['user', 'field_ui'];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $entityTypeId = 'entity_view_mode';
+
+  /**
+   * @var \Drupal\Core\Entity\EntityViewModeInterface
+   */
+  protected $entity;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUpAuthorization($method) {
+    $this->grantPermissionsToTestedRole(['administer display modes']);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function createEntity() {
+    $entity_view_mode = EntityViewMode::create([
+      'id' => 'user.test',
+      'label' => 'Test',
+      'targetEntityType' => 'user',
+    ]);
+    $entity_view_mode->save();
+    return $entity_view_mode;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function getExpectedNormalizedEntity() {
+    return [
+      'cache' => TRUE,
+      'dependencies' => [
+        'module' => [
+          'user',
+        ],
+      ],
+      'id' => 'user.test',
+      'label' => 'Test',
+      'langcode' => 'en',
+      'status' => TRUE,
+      'targetEntityType' => 'user',
+      'uuid' => $this->entity->uuid(),
+    ];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function getNormalizedPostEntity() {
+    // @todo Update in https://www.drupal.org/node/2300677.
+  }
+
+}
