diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 0c63f69cf133..a49c90a3b857 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -209,7 +209,12 @@ pnpm --filter frontend test
pnpm --filter misskey-js test
```
-Backend tests require manual preparation of servers. See the next section for more on this.
+Backend tests require manual preparation of servers. See the [Backend](#backend) section for more on this.
+
+### Frontend
+There are two types of tests for UI components:
+- Tests dealing with the DOM using Testing Library: [`/packages/frontend/test/dom`](/packages/frontend/test/dom)
+- Unit tests for Vue components using Vue Test Utils: [`/packages/frontend/test/vue`](/packages/frontend/test/vue)
### Backend
There are three types of test codes for the backend:
diff --git a/packages/frontend/package.json b/packages/frontend/package.json
index 804160baad30..1c46f8349c2d 100644
--- a/packages/frontend/package.json
+++ b/packages/frontend/package.json
@@ -111,6 +111,7 @@
"@typescript-eslint/parser": "7.17.0",
"@vitest/coverage-v8": "1.6.0",
"@vue/runtime-core": "3.5.12",
+ "@vue/test-utils": "^2.4.6",
"acorn": "8.14.0",
"cross-env": "7.0.3",
"cypress": "13.15.2",
diff --git a/packages/frontend/src/components/MkAsUi.vue b/packages/frontend/src/components/MkAsUi.vue
index 365b767bd646..7cdd890968c7 100644
--- a/packages/frontend/src/components/MkAsUi.vue
+++ b/packages/frontend/src/components/MkAsUi.vue
@@ -24,7 +24,7 @@ SPDX-License-Identifier: AGPL-3.0-only
{{ c.label }}
{{ c.caption }}
-
+
{{ c.label }}
{{ c.caption }}
diff --git a/packages/frontend/src/components/MkInput.vue b/packages/frontend/src/components/MkInput.vue
index 08817fd6a8fa..446768c24e6a 100644
--- a/packages/frontend/src/components/MkInput.vue
+++ b/packages/frontend/src/components/MkInput.vue
@@ -43,17 +43,17 @@ SPDX-License-Identifier: AGPL-3.0-only
-