添加了相关测试文件,引入Tailwindcss

Change-Id: I12054143571bb688590af0357125a0ed26ff2050
diff --git a/src/setupTests.js b/src/setupTests.js
new file mode 100644
index 0000000..fba964d
--- /dev/null
+++ b/src/setupTests.js
@@ -0,0 +1,48 @@
+// 这个文件包含测试环境的设置代码
+import { expect, afterEach } from 'vitest';
+import { cleanup } from '@testing-library/react';
+import * as matchers from '@testing-library/jest-dom';
+
+// 扩展 Vitest 的断言能力
+expect.extend(matchers);
+
+// 每个测试后自动清理
+afterEach(() => {
+  cleanup();
+});
+
+// 模拟 window.matchMedia
+Object.defineProperty(window, 'matchMedia', {
+  writable: true,
+  value: vi.fn().mockImplementation(query => ({
+    matches: false,
+    media: query,
+    onchange: null,
+    addListener: vi.fn(), // 兼容旧版 API
+    removeListener: vi.fn(), // 兼容旧版 API
+    addEventListener: vi.fn(),
+    removeEventListener: vi.fn(),
+    dispatchEvent: vi.fn(),
+  })),
+});
+
+// 模拟 localStorage
+const localStorageMock = (() => {
+  let store = {};
+  return {
+    getItem: (key) => store[key] || null,
+    setItem: (key, value) => {
+      store[key] = value.toString();
+    },
+    removeItem: (key) => {
+      delete store[key];
+    },
+    clear: () => {
+      store = {};
+    },
+  };
+})();
+
+Object.defineProperty(window, 'localStorage', {
+  value: localStorageMock,
+});
\ No newline at end of file