vue3+ts项目 | axios 的测试 | 测试接口

在 App.vue 中,测试接口 

// App.vue  测试接口
  import request from '@/utils/request';
  import { onMounted } from 'vue';
  onMounted(() => {
    request.get('/hosp/hospital/1/10').then((res) => {
      console.log("APP组件展示获取的数据",res);
    })
  })

request.ts 中,进行错误处理提示,参考 HTTP状态码

Vue3 + TypeScript 项目中,你可以使用 **Mock Service Worker (MSW)** 或 **Mock.js** 来创建假接口进行测试。以下是两种方法的详细实现方案: --- ## **方法 1:使用 Mock Service Worker (MSW)(推荐)** MSW 是一个强大的 API 模拟工具,可以在浏览器和服务端拦截请求,返回模拟数据。 ### **1. 安装 MSW** ```bash npm install msw --save-dev ``` ### **2. 创建 Mock 服务** 在 `src/mocks` 目录下创建 `browser.ts` 和 `handlers.ts`: #### **`src/mocks/handlers.ts`**(定义模拟接口) ```typescript import { http, HttpResponse } from &#39;msw&#39;; // 定义模拟数据 const mockUsers = [ { id: 1, name: &#39;张三&#39;, email: &#39;zhangsan@example.com&#39; }, { id: 2, name: &#39;李四&#39;, email: &#39;lisi@example.com&#39; }, ]; // 定义请求拦截逻辑 export const handlers = [ // GET /api/users http.get(&#39;/api/users&#39;, () => { return HttpResponse.json(mockUsers); }), // POST /api/users http.post(&#39;/api/users&#39;, ({ request }) => { const newUser = request.json(); mockUsers.push({ id: mockUsers.length + 1, ...newUser }); return HttpResponse.json({ success: true }); }), ]; ``` #### **`src/mocks/browser.ts`**(启动 Mock 服务) ```typescript import { setupWorker } from &#39;msw/browser&#39;; import { handlers } from &#39;./handlers&#39;; // 启动 Mock Service Worker export const worker = setupWorker(...handlers); ``` ### **3. 在 `main.ts` 中初始化 MSW** ```typescript import { createApp } from &#39;vue&#39;; import App from &#39;./App.vue&#39;; // 仅在开发环境启用 Mock if (import.meta.env.DEV) { const { worker } = await import(&#39;./mocks/browser&#39;); worker.start({ onUnhandledRequest: &#39;bypass&#39; }); } createApp(App).mount(&#39;#app&#39;); ``` ### **4. 在组件中使用模拟接口** ```typescript <script setup lang="ts"> import { ref, onMounted } from &#39;vue&#39;; import http from &#39;@/utils/http&#39;; // 你的 Axios 封装 interface User { id: number; name: string; email: string; } const users = ref<User[]>([]); onMounted(async () => { try { users.value = await http.get<User[]>(&#39;/api/users&#39;); // 会被 MSW 拦截 } catch (error) { console.error(&#39;获取用户失败:&#39;, error); } }); </script> ``` --- ## **方法 2:使用 Mock.js** Mock.js 是一个轻量级的模拟数据生成库,适合简单的假数据测试。 ### **1. 安装 Mock.js** ```bash npm install mockjs --save-dev ``` ### **2. 创建 Mock 数据** 在 `src/mocks` 目录下创建 `mock.ts`: #### **`src/mocks/mock.ts`** ```typescript import Mock from &#39;mockjs&#39;; // 模拟用户数据 Mock.mock(&#39;/api/users&#39;, &#39;get&#39;, { &#39;users|5-10&#39;: [ { &#39;id|+1&#39;: 1, name: &#39;@cname&#39;, // 随机中文名 email: &#39;@email&#39;, // 随机邮箱 }, ], }); // 模拟 POST 请求 Mock.mock(&#39;/api/users&#39;, &#39;post&#39;, (options: any) => { const body = JSON.parse(options.body); return { success: true, message: `用户 ${body.name} 添加成功!`, }; }); ``` ### **3. 在 `main.ts` 中引入 Mock** ```typescript import { createApp } from &#39;vue&#39;; import App from &#39;./App.vue&#39;; // 仅在开发环境启用 Mock if (import.meta.env.DEV) { import(&#39;./mocks/mock&#39;); } createApp(App).mount(&#39;#app&#39;); ``` ### **4. 在组件中使用** 和 MSW 一样,直接调用你的 Axios 封装即可: ```typescript const fetchUsers = async () => { users.value = await http.get(&#39;/api/users&#39;); // 会被 Mock.js 拦截 }; ``` --- ## **对比 MSW 和 Mock.js** | 特性 | MSW | Mock.js | |------|-----|---------| | **拦截方式** | 服务端 + 浏览器拦截 |前端拦截 | | **数据模拟** | 可自定义逻辑 | 基于模板生成随机数据 | | **适用场景** | 适合复杂 API 模拟 | 适合简单假数据 | | **TypeScript 支持** | ✅ 良好 | ⚠️ 一般 | --- ## **总结** - **推荐 MSW**:适合真实 API 模拟,支持拦截 `fetch` 和 `XMLHttpRequest`,更接近真实环境。 - **Mock.js**:适合快速生成随机数据,但灵活性不如 MSW。 你可以根据项目需求选择合适的方式!🚀
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值