唯杰地图 logo唯杰地图
VJMAP
EN

smoke.mjs

vjmap-service/scripts/verify/smoke.mjs 2.6 KB52 行
原文
// vjmap-service REST 冒烟测试(需真实服务 + token)
// 用法: VJMAP_SERVICE_URL=http://127.0.0.1:27660/api/v1 VJMAP_TOKEN=<jwt> 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);