// 2. 至少要有 routes 或資料陣列
const json = pm.response.json();
pm.test("有路線資料", function () {
pm.expect(json.routes || json.length > 0).to.be.ok;
});
// 3. 第一筆要有 routeId + routeName + updateTime
pm.test("路線基本欄位齊全", function () {
const item = json.routes ? json.routes[0] : json[0];
pm.expect(item).to.have.property("routeId");
pm.expect(item).to.have.property("routeName");
pm.expect(item).to.have.property("updateTime");
});
(2) /bus/stops 的測試
pm.test("status = 200", function () {
pm.response.to.have.status(200);
});
const data = pm.response.json();
// 1. 一定要有 routeId + direction
pm.test("有路線與方向", function () {
pm.expect(data).to.have.property("routeId");
pm.expect(data).to.have.property("direction");
pm.expect([0,1]).to.include(data.direction);
});
// 2. stops 一定要是陣列
pm.test("有 stops 陣列", function () {
pm.expect(Array.isArray(data.stops)).to.be.true;
pm.expect(data.stops.length).to.be.above(0);
});
// 3. 第一個站的欄位要齊
pm.test("站點欄位齊全", function () {
const s = data.stops[0];
pm.expect(s).to.have.property("stopId");
pm.expect(s).to.have.property("stopName");
pm.expect(s).to.have.property("sequence");
});
(3) /bus/eta 的測試
pm.test("status = 200", function () {
pm.response.to.have.status(200);
});
const eta = pm.response.json();
// 1. 基本識別一定要在
pm.test("有識別欄位", function () {
pm.expect(eta).to.have.property("routeId");
pm.expect(eta).to.have.property("stopId");
});
// 2. estimateSeconds 跟 stopStatus 至少要有一個
pm.test("有時間或有狀態", function () {
const hasSeconds = eta.hasOwnProperty("estimateSeconds");
const hasStatus = eta.hasOwnProperty("stopStatus");
pm.expect(hasSeconds || hasStatus).to.be.true;
});
// 3. 如果有 estimateSeconds,就要是 >= 0 的整數
if (eta.hasOwnProperty("estimateSeconds")) {
pm.test("estimateSeconds 合理", function () {
pm.expect(eta.estimateSeconds).to.be.a("number");
pm.expect(eta.estimateSeconds).to.be.at.least(0);
});
}
// 4. 如果有 stopStatus,就要在定義的四個裡
if (eta.hasOwnProperty("stopStatus")) {
pm.test("stopStatus 在允許的清單裡", function () {
pm.expect(["normal", "last", "suspended", "noData"]).to.include(eta.stopStatus);
});
}