ken_nogi/PleasanterSystem/dbbackup/test/trySafely.test.js
Kenichiro NOGI ed33892f08 chore: 作業中の変更を整理しコミット(複数プロジェクト分)
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-02 11:09:50 +09:00

62 lines
1.6 KiB
JavaScript

"use strict";
const test = require("node:test");
const assert = require("node:assert/strict");
const { trySafely } = require("../lib/trySafely");
test("成功時はokがtrueで結果を返し、onErrorは呼ばれない", async () => {
let onErrorCalls = 0;
const result = await trySafely(
async () => "done",
() => {
onErrorCalls += 1;
}
);
assert.equal(result.ok, true);
assert.equal(result.value, "done");
assert.equal(onErrorCalls, 0);
});
test("失敗時はokがfalseでonErrorが呼ばれ、例外は外に漏れない", async () => {
const capturedErrors = [];
const result = await trySafely(
async () => {
throw new Error("boom");
},
(err) => {
capturedErrors.push(err);
}
);
assert.equal(result.ok, false);
assert.equal(result.error.message, "boom");
assert.equal(capturedErrors.length, 1);
assert.equal(capturedErrors[0].message, "boom");
});
test("1つ目が失敗しても2つ目は独立して必ず実行される", async () => {
const calls = [];
const r1 = await trySafely(
async () => {
calls.push("a-start");
throw new Error("fail-a");
},
() => calls.push("a-error")
);
const r2 = await trySafely(
async () => {
calls.push("b-start");
return "b-done";
},
() => calls.push("b-error")
);
assert.deepEqual(calls, ["a-start", "a-error", "b-start"]);
assert.equal(r1.ok, false);
assert.equal(r2.ok, true);
assert.equal(r2.value, "b-done");
});