1
0

error.test.ts 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import { describe, expect, test } from "bun:test"
  2. import { errorData, 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. const data = errorData(err)
  9. expect(data.type).toBe("Error")
  10. expect(data.message).toBe("boom")
  11. expect(String(data.formatted)).toContain("boom")
  12. })
  13. test("extracts message from record-like values", () => {
  14. const err = { message: "bad input", code: "E_BAD" }
  15. expect(errorMessage(err)).toBe("bad input")
  16. const data = errorData(err)
  17. expect(data.message).toBe("bad input")
  18. expect(data.code).toBe("E_BAD")
  19. })
  20. test("never returns bare {} for opaque object errors", () => {
  21. expect(errorFormat({})).not.toBe("{}")
  22. expect(errorFormat({})).toContain("no message")
  23. class OpaqueError {}
  24. const opaque = new OpaqueError()
  25. Object.defineProperty(opaque, "secret", { value: "hidden", enumerable: false })
  26. expect(errorFormat(opaque)).not.toBe("{}")
  27. expect(errorFormat(opaque)).toContain("OpaqueError")
  28. })
  29. test("handles opaque throwables with custom toString", () => {
  30. const err = {
  31. toString() {
  32. return "ResolveMessage: Cannot resolve module"
  33. },
  34. }
  35. expect(errorMessage(err)).toBe("ResolveMessage: Cannot resolve module")
  36. const data = errorData(err)
  37. expect(data.message).toBe("ResolveMessage: Cannot resolve module")
  38. expect(String(data.formatted)).toContain("ResolveMessage")
  39. })
  40. })