describe("basic functionality", () => { test("length", () => { expect(Object.hasOwn).toHaveLength(2); }); test("returns true for existent own property", () => { const o = { foo: "bar" }; expect(Object.hasOwn(o, "foo")).toBeTrue(); }); test("returns false for non-existent own property", () => { const o = {}; expect(Object.hasOwn(o, "foo")).toBeFalse(); }); test("returns false for existent prototype chain property", () => { const o = {}; Object.prototype.foo = "bar"; expect(Object.hasOwn(o, "foo")).toBeFalse(); }); }); describe("errors", () => { test("null argument", () => { expect(() => { Object.hasOwn(null); }).toThrowWithMessage(TypeError, "ToObject on null or undefined"); }); test("undefined argument", () => { expect(() => { Object.hasOwn(undefined); }).toThrowWithMessage(TypeError, "ToObject on null or undefined"); }); });