refactor(測試): 共用假 Gitea 的啟動與環境變數
每支測試各自寫一次「啟動 stub、登記 close、組環境變數」已經重複三次,抽到 helpers 之後新增測試檔只要一行。各檔仍保留自己的預設路由,因為那是該檔的 情境設定,不該共用。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -89,3 +89,17 @@ function safeParse(raw) {
|
|||||||
return raw;
|
return raw;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 啟動假 Gitea 並登記在測試結束時關掉,省去每支測試各寫一次 close。
|
||||||
|
* @param {object} t node:test 的 TestContext
|
||||||
|
* @param {Record<string, object|Function>} routes
|
||||||
|
*/
|
||||||
|
export async function withStubGitea(t, routes) {
|
||||||
|
const stub = await startStubGitea(routes);
|
||||||
|
t.after(() => stub.close());
|
||||||
|
return stub;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 把腳本指向這台假 Gitea 的環境變數 */
|
||||||
|
export const stubEnv = (stub) => ({ TEA_SDLC_API_BASE: stub.base, TEA_SDLC_TOKEN: 'stub-token' });
|
||||||
|
|||||||
@@ -1,20 +1,15 @@
|
|||||||
import test from 'node:test';
|
import test from 'node:test';
|
||||||
import assert from 'node:assert/strict';
|
import assert from 'node:assert/strict';
|
||||||
import { runScript } from './helpers/run-script.js';
|
import { runScript } from './helpers/run-script.js';
|
||||||
import { startStubGitea, healthyRoutes } from './helpers/stub-gitea.js';
|
import { healthyRoutes, stubEnv as envFor, withStubGitea } from './helpers/stub-gitea.js';
|
||||||
|
|
||||||
const REPO = 'plugins/tea-sdlc';
|
const REPO = 'plugins/tea-sdlc';
|
||||||
|
|
||||||
/** 讓每個測試都拿到一台乾淨的假 Gitea,並在結束後關掉 */
|
/** 讓每個測試都拿到一台乾淨的假 Gitea,並在結束後關掉 */
|
||||||
async function withStub(t, overrides = {}) {
|
async function withStub(t, overrides = {}) {
|
||||||
const stub = await startStubGitea(healthyRoutes(REPO, overrides));
|
return withStubGitea(t, healthyRoutes(REPO, overrides));
|
||||||
t.after(() => stub.close());
|
|
||||||
return stub;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function envFor(stub) {
|
|
||||||
return { TEA_SDLC_API_BASE: stub.base, TEA_SDLC_TOKEN: 'stub-token' };
|
|
||||||
}
|
|
||||||
|
|
||||||
test('列出目標 repo 的既有標籤,輸出單行 JSON 且 exit 0', async (t) => {
|
test('列出目標 repo 的既有標籤,輸出單行 JSON 且 exit 0', async (t) => {
|
||||||
const stub = await withStub(t);
|
const stub = await withStub(t);
|
||||||
|
|||||||
@@ -1,17 +1,14 @@
|
|||||||
import test from 'node:test';
|
import test from 'node:test';
|
||||||
import assert from 'node:assert/strict';
|
import assert from 'node:assert/strict';
|
||||||
import { runScript, pathWithOnly } from './helpers/run-script.js';
|
import { runScript, pathWithOnly } from './helpers/run-script.js';
|
||||||
import { startStubGitea, healthyRoutes } from './helpers/stub-gitea.js';
|
import { healthyRoutes, stubEnv as envFor, withStubGitea } from './helpers/stub-gitea.js';
|
||||||
|
|
||||||
const REPO = 'plugins/tea-sdlc';
|
const REPO = 'plugins/tea-sdlc';
|
||||||
|
|
||||||
async function withStub(t, overrides = {}) {
|
async function withStub(t, overrides = {}) {
|
||||||
const stub = await startStubGitea(healthyRoutes(REPO, overrides));
|
return withStubGitea(t, healthyRoutes(REPO, overrides));
|
||||||
t.after(() => stub.close());
|
|
||||||
return stub;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const envFor = (stub) => ({ TEA_SDLC_API_BASE: stub.base, TEA_SDLC_TOKEN: 'stub-token' });
|
|
||||||
|
|
||||||
// ── 第一層:執行環境 ────────────────────────────────────────────────
|
// ── 第一層:執行環境 ────────────────────────────────────────────────
|
||||||
|
|
||||||
|
|||||||
@@ -6,17 +6,14 @@
|
|||||||
import test from 'node:test';
|
import test from 'node:test';
|
||||||
import assert from 'node:assert/strict';
|
import assert from 'node:assert/strict';
|
||||||
import { runScript } from './helpers/run-script.js';
|
import { runScript } from './helpers/run-script.js';
|
||||||
import { startStubGitea, healthyRoutes } from './helpers/stub-gitea.js';
|
import { healthyRoutes, stubEnv as envFor, withStubGitea } from './helpers/stub-gitea.js';
|
||||||
|
|
||||||
const REPO = 'plugins/tea-sdlc';
|
const REPO = 'plugins/tea-sdlc';
|
||||||
|
|
||||||
async function withStub(t, overrides = {}) {
|
async function withStub(t, overrides = {}) {
|
||||||
const stub = await startStubGitea(healthyRoutes(REPO, overrides));
|
return withStubGitea(t, healthyRoutes(REPO, overrides));
|
||||||
t.after(() => stub.close());
|
|
||||||
return stub;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const envFor = (stub) => ({ TEA_SDLC_API_BASE: stub.base, TEA_SDLC_TOKEN: 'stub-token' });
|
|
||||||
|
|
||||||
// ── 輸入:具名 flag ────────────────────────────────────────────────
|
// ── 輸入:具名 flag ────────────────────────────────────────────────
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user