diff --git a/tests/src/Functional/comment/JsonApiFunctionalCommentTest.php b/tests/src/Functional/comment/JsonApiFunctionalCommentTest.php
new file mode 100644
index 0000000..5e29e15
--- /dev/null
+++ b/tests/src/Functional/comment/JsonApiFunctionalCommentTest.php
@@ -0,0 +1,30 @@
+<?php
+
+namespace Drupal\Tests\jsonapi\Functional\comment;
+
+use Drupal\Component\Serialization\Json;
+
+/**
+ * Test multi-level includes of jsonapi on comment's entity_id.
+ *
+ * The comment's entity_id is overwrited by bundle, the test's main purpose is
+ * to test if multi-level includes of jsonapi work well on comment when comment
+ * not belong to node.
+ *
+ * @group jsonapi
+ */
+class JsonApiFunctionalCommentTest extends JsonApiFunctionalCommentTestBase {
+
+  /**
+   * Tests reading comment.
+   */
+  public function testReadComment() {
+    $values = ['field_my_user' => ['target_id' => $this->user->id()]];
+    $term = $this->createTerm($this->vocabulary, $values);
+    $comment = $this->createComment($term, 'field_my_comment', 'This is the comment_term body');
+    $output = Json::decode($this->drupalGet('/jsonapi/comment/comment_term/' . $comment->uuid(), ['query' => ['include' => 'entity_id,entity_id.field_my_user']]));
+    $this->assertEquals($term->uuid(), $output['included'][0]['attributes']['uuid']);
+    $this->assertEquals($this->user->uuid(), $output['included'][1]['attributes']['uuid']);
+  }
+
+}
diff --git a/tests/src/Functional/comment/JsonApiFunctionalCommentTestBase.php b/tests/src/Functional/comment/JsonApiFunctionalCommentTestBase.php
new file mode 100644
index 0000000..6599086
--- /dev/null
+++ b/tests/src/Functional/comment/JsonApiFunctionalCommentTestBase.php
@@ -0,0 +1,177 @@
+<?php
+
+namespace Drupal\Tests\jsonapi\Functional\comment;
+
+use Drupal\comment\Entity\Comment;
+use Drupal\comment\Entity\CommentType;
+use Drupal\Core\Entity\EntityInterface;
+use Drupal\Core\Field\FieldStorageDefinitionInterface;
+use Drupal\Core\Url;
+use Drupal\field\Entity\FieldConfig;
+use Drupal\field\Entity\FieldStorageConfig;
+use Drupal\field\Tests\EntityReference\EntityReferenceTestTrait;
+use Drupal\Tests\BrowserTestBase;
+use Drupal\Tests\taxonomy\Functional\TaxonomyTestTrait;
+use Drupal\user\Entity\Role;
+use Drupal\user\RoleInterface;
+use GuzzleHttp\Exception\ClientException;
+use GuzzleHttp\Exception\ServerException;
+
+/**
+ * Provides helper methods for the JSON API module's functional tests.
+ */
+abstract class JsonApiFunctionalCommentTestBase extends BrowserTestBase {
+
+  use EntityReferenceTestTrait;
+  use TaxonomyTestTrait;
+
+  public static $modules = [
+    'jsonapi',
+    'serialization',
+    'taxonomy',
+    'comment',
+  ];
+
+  /**
+   * User for testing.
+   *
+   * @var \Drupal\user\Entity\User
+   */
+  protected $user;
+
+  /**
+   * Vocabulary for testing.
+   *
+   * @var \Drupal\taxonomy\Entity\Vocabulary
+   */
+  protected $vocabulary;
+
+  /**
+   * HTTP client for test.
+   *
+   * @var \GuzzleHttp\ClientInterface
+   */
+  protected $httpClient;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    // Set up a HTTP client that accepts relative URLs.
+    $this->httpClient = $this->container->get('http_client_factory')
+      ->fromOptions(['base_uri' => $this->baseUrl]);
+
+    $this->vocabulary = $this->createVocabulary();
+
+    $this->createEntityReferenceField(
+      'taxonomy_term',
+      $this->vocabulary->id(),
+      'field_my_user',
+      'field_my_user',
+      'user',
+      'default',
+      [
+        'auto_create' => TRUE,
+      ],
+      FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED
+    );
+    $commentTerm = CommentType::create([
+      'id' => 'comment_term',
+      'label' => 'comment term',
+      'description' => 'This is the comment bundle for taxonomy term.',
+      'target_entity_type_id' => 'taxonomy_term',
+    ]);
+    $commentTerm->save();
+
+    // Create a comment field on tags.
+    $fieldStorageTagsComment = FieldStorageConfig::create([
+      'entity_type' => 'taxonomy_term',
+      'field_name' => 'field_my_comment',
+      'type' => 'comment',
+      'settings' => [
+        'comment_type' => 'comment_term',
+      ],
+    ]);
+    $fieldStorageTagsComment->save();
+    FieldConfig::create([
+      'field_storage' => $fieldStorageTagsComment,
+      'label' => $this->randomMachineName(),
+      'bundle' => $this->vocabulary->id(),
+    ])->save();
+
+    // Create a user.
+    $this->user = $this->drupalCreateUser([]);
+
+    $this->grantPermissions(Role::load(RoleInterface::ANONYMOUS_ID), [
+      'access user profiles',
+      'administer taxonomy',
+      'administer comments',
+    ]);
+
+    drupal_flush_all_caches();
+  }
+
+  /**
+   * Performs a HTTP request. Wraps the Guzzle HTTP client.
+   *
+   * Why wrap the Guzzle HTTP client? Because any error response is returned via
+   * an exception, which would make the tests unnecessarily complex to read.
+   *
+   * @param string $method
+   *   HTTP method.
+   * @param \Drupal\Core\Url $url
+   *   URL to request.
+   * @param array $request_options
+   *   Request options to apply.
+   *
+   * @see \GuzzleHttp\ClientInterface::request()
+   *
+   * @return \Psr\Http\Message\ResponseInterface
+   *   Response
+   */
+  protected function request($method, Url $url, array $request_options) {
+    try {
+      $response = $this->httpClient->request($method, $url->toString(), $request_options);
+    }
+    catch (ClientException $e) {
+      $response = $e->getResponse();
+    }
+    catch (ServerException $e) {
+      $response = $e->getResponse();
+    }
+
+    return $response;
+  }
+
+  /**
+   * Create a comment.
+   *
+   * @param \Drupal\Core\Entity\EntityInterface $entity
+   *   The entity where the comment create on.
+   * @param string $fieldName
+   *   The comment field name.
+   * @param string $body
+   *   The comment body.
+   *
+   * @return \Drupal\comment\Entity\Comment
+   *   Comment entity.
+   */
+  public function createComment(EntityInterface $entity, $fieldName, $body) {
+    $values = [
+      'entity_type' => 'taxonomy_term',
+      'entity_id' => $entity->id(),
+      'field_name' => $fieldName,
+      'uid' => 0,
+      'comment_type' => 'comment_term',
+      'subject' => 'My Awesome Comment',
+      'comment_body' => $body,
+      'status' => 1,
+    ];
+    $comment = Comment::create($values);
+    $comment->save();
+    return $comment;
+  }
+
+}
