// vjmap-service REST 冒烟测试(需真实服务 + token) // 用法: VJMAP_SERVICE_URL=http://127.0.0.1:27660/api/v1 VJMAP_TOKEN= node smoke.mjs // 无环境变量时只跑 SDK 构造与 URL 组装(离线断言),其余 skip。 import { createRequire } from "node:module"; const require = createRequire(import.meta.url); const { Vjmap } = require("../../sdk/nodejs/vjmap.js"); const SERVICE_URL = process.env.VJMAP_SERVICE_URL; const TOKEN = process.env.VJMAP_TOKEN; const MAPID = process.env.VJMAP_TEST_MAPID; // 可选:已存在的图名,跑读取类接口 let pass = 0, fail = 0, skip = 0; const ok = (c, n, x = "") => { c ? pass++ : (fail++, console.log("FAIL", n, x)); }; const sk = (n, why) => { skip++; console.log("SKIP", n, why); }; // ---- 离线:SDK 构造与 URL 组装 ---- const svc = new Vjmap("http://127.0.0.1:27660/api/v1", "dummy-token"); ok(typeof svc.heart === "function", "sdk: heart fn"); ok(typeof svc.openMap === "function", "sdk: openMap fn"); ok(typeof svc.metadata === "function", "sdk: metadata fn"); ok(typeof svc.queryFeatures === "function", "sdk: queryFeatures fn"); ok(typeof svc.cmdExportPdf === "function", "sdk: cmdExportPdf fn"); // rasterTileUrl({mapid,version,layer,z,x,y}) —— 对象入参,z/x/y 默认 {z}/{x}/{y} 模板 const tileUrl = svc.rasterTileUrl?.({ mapid: "m1", version: "v1", layer: "default", z: 3, x: 4, y: 5 }); ok(typeof tileUrl === "string" && tileUrl.includes("/api/v1/map/tile/m1/v1/default/3/4/5"), "sdk: rasterTileUrl 形态", String(tileUrl)); if (!SERVICE_URL || !TOKEN) { sk("live REST", "缺 VJMAP_SERVICE_URL / VJMAP_TOKEN"); } else { const live = new Vjmap(SERVICE_URL, TOKEN); const t = async (name, fn) => { try { const r = await fn(); ok(true, name); return r; } catch (e) { fail++; console.log("FAIL", name, e.message?.slice(0, 120)); return undefined; } }; const heart = await t("GET /heart", () => live.heart()); if (heart) ok(heart.status === "ok", "heart.status==ok"); await t("GET /version", () => live.version()); await t("runStatus", () => live.runStatus()); await t("supportFormat", () => live.supportFormat()); await t("listMaps", () => live.listMaps()); if (MAPID) { await t("metadata", () => live.metadata(MAPID)); await t("getDataBounds", () => live.getDataBounds(MAPID)); const th = await t("thumbnailBytes", () => live.thumbnailBytes(MAPID, "", { width: 128, height: 96 })); if (th) ok(th.byteLength > 100, "thumbnail bytes>100"); } else sk("mapid 相关", "缺 VJMAP_TEST_MAPID"); } console.log(`\n== vjmap-service smoke: pass=${pass} fail=${fail} skip=${skip} ==`); process.exit(fail ? 1 : 0);