error.test.ts 1.1 KB

123456789101112131415161718192021222324252627282930313233343536
  1. import { describe, expect, test } from "bun:test"
  2. import { errorFormat, errorMessage } from "../../src/util/error"
  3. describe("util.error", () => {
  4. test("formats native Error instances", () => {
  5. const err = new Error("boom")
  6. expect(errorMessage(err)).toBe("boom")
  7. expect(errorFormat(err)).toContain("boom")
  8. })
  9. test("extracts message from record-like values", () => {
  10. const err = { message: "bad input", code: "E_BAD" }
  11. expect(errorMessage(err)).toBe("bad input")
  12. })
  13. test("never returns bare {} for opaque object errors", () => {
  14. expect(errorFormat({})).not.toBe("{}")
  15. expect(errorFormat({})).toContain("no message")
  16. class OpaqueError {}
  17. const opaque = new OpaqueError()
  18. Object.defineProperty(opaque, "secret", { value: "hidden", enumerable: false })
  19. expect(errorFormat(opaque)).not.toBe("{}")
  20. expect(errorFormat(opaque)).toContain("OpaqueError")
  21. })
  22. test("handles opaque throwables with custom toString", () => {
  23. const err = {
  24. toString() {
  25. return "ResolveMessage: Cannot resolve module"
  26. },
  27. }
  28. expect(errorMessage(err)).toBe("ResolveMessage: Cannot resolve module")
  29. })
  30. })