// ! API 参考 https://httpbin.org/#/ import { expect, describe, it, afterAll } from "vitest"; import { Link, globalCookie } from "../../src/index"; // 现在默认是 fetchRequester 了 // Link.registerRequester(fetchRequester); // 浏览器中的 Cookie 会有跨域问题,所以测试需要一点点操作 const root = __Root__; const itNodeOnly = __isBrowser__ ? it.skip : it; describe("Cookie 测试", function () { it("Cookie 接收 测试", async () => { const link = new Link({ url: root + `/cookies/set`, params: { freeform: "cookieData", }, autoRedirect: false, // ! redirect 过程中 set-Cookie 这个头会被后面的请求覆盖。。。 }); return link.send().then(async (res) => { const defaultJar = globalCookie.cookies.get("default"); if (!__isBrowser__) { expect(defaultJar).to.eql([ ["freeform", "cookieData", {}], ["Path", "/", {}], ]); expect(res.cookie).toEqual({ freeform: "cookieData", Path: "/", }); } else { expect(document.cookie).toEqual("freeform=cookieData"); } }); }); itNodeOnly("Cookie 不写入 测试", async () => { const link = new Link({ url: root + `/cookies/set`, params: { freeform: "This should be an Error", }, cookie: { read: true, write: false, }, autoRedirect: false, }); const OldJar = globalCookie.cookies.get("default")!.join(""); return link.send().then(async (res) => { // 旧的 Jar 和新的 Jar 值相等,说明没有进行写入 const defaultJar = globalCookie.cookies.get("default"); expect(defaultJar!.join("")).to.eql(OldJar); expect(res.cookie).toEqual({ freeform: "This should be an Error", Path: "/", }); }); }); it("<通用> Cookie 携带 测试", async () => { const link = new Link({ url: root + `/cookies`, autoRedirect: false, }); return link.send().then(async (res) => { const { cookies } = await res.json(); expect(cookies).toEqual({ freeform: "cookieData", }); }); }); it("<通用> Cookie 不携带 测试", async () => { const link = new Link({ url: root + `/cookies`, autoRedirect: false, cookie: { write: false, }, }); return link.send().then(async (res) => { const { cookies } = await res.json(); expect(cookies).toEqual({ freeform: "cookieData", }); }); }); itNodeOnly(" Cookie 携带 测试", async () => { globalCookie.set("key", "value"); globalCookie.set("key1", "value2"); const link = new Link({ url: root + `/cookies`, autoRedirect: false, }); return link.send().then(async (res) => { const { cookies } = await res.json(); expect(cookies).toEqual({ freeform: "cookieData", key: "value", key1: "value2", }); }); }); afterAll(() => { __isBrowser__ && (document.cookie = ""); }); });