这是基于vue-vben-admin 模板适用于abp Vnext的前端管理项目
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

99 lines
2.9 KiB

import axios from "axios";
import MockAdapter from "axios-mock-adapter";
import { afterEach, beforeEach, describe, expect, it } from "vitest";
import { RequestClient } from "./request-client";
describe("requestClient", () => {
let mock: MockAdapter;
let requestClient: RequestClient;
beforeEach(() => {
mock = new MockAdapter(axios);
requestClient = new RequestClient();
});
afterEach(() => {
mock.reset();
});
it("should successfully make a GET request", async () => {
mock.onGet("test/url").reply(200, { data: "response" });
const response = await requestClient.get("test/url");
expect(response.data).toEqual({ data: "response" });
});
it("should successfully make a POST request", async () => {
const postData = { key: "value" };
const mockData = { data: "response" };
mock.onPost("/test/post", postData).reply(200, mockData);
const response = await requestClient.post("/test/post", postData);
expect(response.data).toEqual(mockData);
});
it("should successfully make a PUT request", async () => {
const putData = { key: "updatedValue" };
const mockData = { data: "updated response" };
mock.onPut("/test/put", putData).reply(200, mockData);
const response = await requestClient.put("/test/put", putData);
expect(response.data).toEqual(mockData);
});
it("should successfully make a DELETE request", async () => {
const mockData = { data: "delete response" };
mock.onDelete("/test/delete").reply(200, mockData);
const response = await requestClient.delete("/test/delete");
expect(response.data).toEqual(mockData);
});
it("should handle network errors", async () => {
mock.onGet("/test/error").networkError();
try {
await requestClient.get("/test/error");
expect(true).toBe(false);
} catch (error: any) {
expect(error.isAxiosError).toBe(true);
expect(error.message).toBe("Network Error");
}
});
it("should handle timeout", async () => {
mock.onGet("/test/timeout").timeout();
try {
await requestClient.get("/test/timeout");
expect(true).toBe(false);
} catch (error: any) {
expect(error.isAxiosError).toBe(true);
expect(error.code).toBe("ECONNABORTED");
}
});
it("should successfully upload a file", async () => {
const fileData = new Blob(["file contents"], { type: "text/plain" });
mock.onPost("/test/upload").reply((config) => {
return config.data instanceof FormData && config.data.has("file")
? [200, { data: "file uploaded" }]
: [400, { error: "Bad Request" }];
});
const response = await requestClient.upload("/test/upload", {
file: fileData,
});
expect(response.data).toEqual({ data: "file uploaded" });
});
it("should successfully download a file as a blob", async () => {
const mockFileContent = new Blob(["mock file content"], {
type: "text/plain",
});
mock.onGet("/test/download").reply(200, mockFileContent);
const res = await requestClient.download("/test/download");
expect(res.data).toBeInstanceOf(Blob);
});
});