diff --git a/webapp/src/components/cardDetail/cardDetail.test.tsx b/webapp/src/components/cardDetail/cardDetail.test.tsx
new file mode 100644
index 000000000..2dfd2042f
--- /dev/null
+++ b/webapp/src/components/cardDetail/cardDetail.test.tsx
@@ -0,0 +1,145 @@
+// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
+// See LICENSE.txt for license information.
+import React from 'react'
+
+import 'isomorphic-fetch'
+import {act, render} from '@testing-library/react'
+
+import configureStore from 'redux-mock-store'
+import {Provider as ReduxProvider} from 'react-redux'
+
+import {FetchMock} from '../../test/fetchMock'
+import {TestBlockFactory} from '../../test/testBlockFactory'
+
+import {mockDOM, wrapIntl} from '../../testUtils'
+
+import CardDetail from './cardDetail'
+
+global.fetch = FetchMock.fn
+
+beforeEach(() => {
+ FetchMock.fn.mockReset()
+})
+
+// This is needed to run EasyMDE in tests.
+// It needs bounding rectangle box property
+// on HTML elements, but Jest's HTML engine jsdom
+// doesn't provide it.
+// So we mock it.
+beforeAll(() => {
+ mockDOM()
+})
+
+describe('components/cardDetail/CardDetail', () => {
+ const board = TestBlockFactory.createBoard()
+
+ const view = TestBlockFactory.createBoardView(board)
+ view.fields.sortOptions = []
+ view.fields.groupById = undefined
+ view.fields.hiddenOptionIds = []
+
+ const card = TestBlockFactory.createCard(board)
+
+ const createdAt = Date.parse('01 Jan 2021 00:00:00 GMT')
+ const comment1 = TestBlockFactory.createComment(card)
+ comment1.type = 'comment'
+ comment1.title = 'Comment 1'
+ comment1.parentId = card.id
+ comment1.createAt = createdAt
+
+ const comment2 = TestBlockFactory.createComment(card)
+ comment2.type = 'comment'
+ comment2.title = 'Comment 2'
+ comment2.parentId = card.id
+ comment2.createAt = createdAt
+
+ test('should show comments', async () => {
+ const mockStore = configureStore([])
+ const store = mockStore({
+ users: {
+ workspaceUsers: [
+ {username: 'username_1'},
+ ],
+ },
+ })
+
+ const component = (
+