Skip to content

真实接口请求测试组件(FetchRealApiTest.vue)

vue
<template>
  <button @click="fetchResults">{{ value }}</button>
</template>

<script>
  import axios from "axios";
  //
  export default {
    data() {
      return {
        value: null,
      };
    },

    methods: {
      async fetchResults() {
        const response = await axios.get("/custom");
        this.value = response.data;
      },
    },
  };
</script>

真实接口请求测试(FetchRealApiTest.spec.js)

js
// src/components/__tests__/FetchRealApiTest.spec.js
import { shallowMount } from "@vue/test-utils";
import flushPromises from "flush-promises";
import axios from "axios";
import FetchRealApiTest from "../JestTest/FetchRealApiTest.vue";

// 配置测试环境接口
axios.defaults.baseURL = "http://localhost:8080/";
// 添加请求拦截器:打印所有真实请求的地址
// axios.interceptors.request.use((config) => {
//   console.log("真实请求地址:", config.baseURL + config.url); // 打印完整 URL
//   console.log("请求方法:", config.method);
//   return config;
// });
describe("FetchRealApiTest", () => {
  /**
   * 真实接口请求:点击按钮后获取数据并渲染
   */
  it("真实接口请求:点击按钮后获取数据并渲染", async () => {
    // 1. 挂载组件
    const wrapper = shallowMount(FetchRealApiTest);
    // 2. 记录初始文本(确保初始状态正确)
    const initialText = wrapper.text();
    expect(initialText).toBe(""); // 假设初始文本为空

    // 3. 点击按钮触发真实接口请求
    await wrapper.find("button").trigger("click");

    // 4. 等待真实接口响应(关键:根据接口延迟调整等待逻辑)
    // 循环等待,直到数据渲染或超时(最多等10秒)
    let waitTime = 0;
    while (wrapper.text() === initialText && waitTime < 100) {
      await new Promise((resolve) => setTimeout(resolve, 100)); // 每100ms检查一次
      waitTime++;
    }

    // 5. 断言接口返回的数据已渲染(根据真实接口返回值调整)
    // 假设真实接口返回 { value: "真实数据" },组件渲染该值
    expect(wrapper.text()).toContain("真实按钮"); // 用 toContain 兼容可能的其他文本
  });
});

Released under the MIT License.