Object.defineProperties.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. test("length is 2", () => {
  2. expect(Object.defineProperties).toHaveLength(2);
  3. });
  4. describe("errors", () => {
  5. test("non-object argument", () => {
  6. expect(() => Object.defineProperties(42, {})).toThrowWithMessage(
  7. TypeError,
  8. "Object argument is not an object"
  9. );
  10. });
  11. });
  12. describe("normal behavior", () => {
  13. test("returns given object", () => {
  14. const o = {};
  15. expect(Object.defineProperties(o, {})).toBe(o);
  16. });
  17. test("defines given properties on object", () => {
  18. const properties = {
  19. foo: {
  20. writable: true,
  21. configurable: true,
  22. value: "foo",
  23. },
  24. bar: {
  25. enumerable: true,
  26. value: "bar",
  27. },
  28. baz: {
  29. get() {},
  30. set() {},
  31. },
  32. };
  33. const o = Object.defineProperties({}, properties);
  34. expect(Object.getOwnPropertyNames(o)).toEqual(["foo", "bar", "baz"]);
  35. expect(Object.getOwnPropertyDescriptor(o, "foo")).toEqual({
  36. value: "foo",
  37. writable: true,
  38. enumerable: false,
  39. configurable: true,
  40. });
  41. expect(Object.getOwnPropertyDescriptor(o, "bar")).toEqual({
  42. value: "bar",
  43. writable: false,
  44. enumerable: true,
  45. configurable: false,
  46. });
  47. expect(Object.getOwnPropertyDescriptor(o, "baz")).toEqual({
  48. get: properties.baz.get,
  49. set: properties.baz.set,
  50. enumerable: false,
  51. configurable: false,
  52. });
  53. });
  54. });