diff --git a/src/engine/engine.test.ts b/src/engine/engine.test.ts index e8d8454..960cc1b 100644 --- a/src/engine/engine.test.ts +++ b/src/engine/engine.test.ts @@ -1,9 +1,11 @@ -import { describe, it, expect, beforeAll } from "vitest"; +import { describe, it, expect, beforeAll, vi } from "vitest"; import { SumEngine } from "./index"; import { qty, EvalError, XRefError } from "./types"; import type { XRefResolution, EvalCtx } from "./evaluator"; +import * as evaluator from "./evaluator"; import { evaluate } from "./evaluator"; import { formatValue } from "./formatter"; +import { logger } from "../logger"; let eng: SumEngine; @@ -451,4 +453,21 @@ describe("evaluation errors", () => { } as unknown as EvalCtx; expect(() => evaluate({ k: "xref", sheet: "Sheet", key: "key" }, ctx)).toThrowError(XRefError); }); + + it("evaluateDocument captures unexpected errors", () => { + const mockEval = vi.spyOn(evaluator, "evaluate").mockImplementation(() => { + throw new Error("Boom"); + }); + + const warnSpy = vi.spyOn(logger, "warn").mockImplementation(() => {}); + + const result = eng.evaluateDocument("1 + 1"); + + expect(result[0].error).toBe("Boom"); + expect(result[0].value).toBeNull(); + expect(warnSpy).toHaveBeenCalledWith("evaluate failed:", expect.any(Error)); + + warnSpy.mockRestore(); + mockEval.mockRestore(); + }); });