@halsp/native
Version:
Halsp 的 NodeJS 原生环境
93 lines (83 loc) • 2.48 kB
text/typescript
import "../../src";
import "@halsp/body";
import request from "supertest";
import { Startup } from "@halsp/core";
test("text body", async () => {
const server = await new Startup()
.useNative({
port: 0,
})
.useHttpTextBody()
.use(async (ctx) => {
ctx.res.ok("BODY");
})
.listen();
const res = await request(server).get("").type("text");
server.close();
expect(res.status).toBe(200);
expect(res.headers["content-type"]).toBe("text/plain; charset=utf-8");
expect(res.text).toBe("BODY");
});
test("text body explicit type", async () => {
const server = await new Startup()
.useNative({
port: 0,
})
.use(async (ctx) => {
ctx.res.setHeader("content-type", "text/plain");
ctx.res.setHeader("content-length", Buffer.byteLength("BODY").toString());
ctx.res.ok("BODY");
})
.listen();
const res = await request(server).get("").type("text");
server.close();
expect(res.status).toBe(200);
expect(res.headers["content-type"]).toBe("text/plain");
expect(res.text).toBe("BODY");
});
test("html body", async () => {
const server = await new Startup()
.useNative({
port: 0,
})
.use(async (ctx) => {
ctx.res.ok("<div>BODY</div>");
})
.listen();
const res = await request(server).get("").type("text");
server.close();
expect(res.status).toBe(200);
expect(res.headers["content-type"]).toBe("text/html; charset=utf-8");
expect(res.text).toBe("<div>BODY</div>");
});
function runTextReturn(headersSent: boolean) {
test(`return text headersSent: ${headersSent}`, async () => {
const server = await new Startup()
.useNative({
port: 0,
})
.use(async (ctx) => {
if (headersSent) {
ctx.resStream.flushHeaders();
}
ctx.res.ok("BODY");
})
.listen();
const res = await request(server).get("").responseType("text/plain");
server.close();
if (headersSent) {
expect(res.status).toBe(404);
expect(res.headers["content-type"]).toBeUndefined();
expect(res.headers["content-length"]).toBeUndefined();
} else {
expect(res.status).toBe(200);
expect(res.headers["content-type"]).toBe("text/plain; charset=utf-8");
expect(res.headers["content-length"]).toBe(
Buffer.byteLength("BODY").toString(),
);
}
expect(res.body).toEqual(Buffer.from("BODY", "utf-8"));
});
}
runTextReturn(true);
runTextReturn(false);