Reflect.ownKeys.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. test("length is 1", () => {
  2. expect(Reflect.ownKeys).toHaveLength(1);
  3. });
  4. describe("errors", () => {
  5. test("target must be an object", () => {
  6. [null, undefined, "foo", 123, NaN, Infinity].forEach(value => {
  7. expect(() => {
  8. Reflect.ownKeys(value);
  9. }).toThrowWithMessage(TypeError, `${value} is not an object`);
  10. });
  11. });
  12. });
  13. describe("normal behavior", () => {
  14. test("regular empty object has no own keys", () => {
  15. var objectOwnKeys = Reflect.ownKeys({});
  16. expect(objectOwnKeys instanceof Array).toBeTrue();
  17. expect(objectOwnKeys).toHaveLength(0);
  18. });
  19. test("regular object with some properties has own keys", () => {
  20. var symbol = Symbol("symbol");
  21. var objectOwnKeys = Reflect.ownKeys({ foo: "bar", [symbol]: "qux", bar: "baz", 0: 42 });
  22. expect(objectOwnKeys instanceof Array).toBeTrue();
  23. expect(objectOwnKeys).toHaveLength(4);
  24. expect(objectOwnKeys[0]).toBe("0");
  25. expect(objectOwnKeys[1]).toBe("foo");
  26. expect(objectOwnKeys[2]).toBe("bar");
  27. expect(objectOwnKeys[3]).toBe(symbol);
  28. });
  29. test("empty array has only 'length' own key", () => {
  30. var arrayOwnKeys = Reflect.ownKeys([]);
  31. expect(arrayOwnKeys instanceof Array).toBeTrue();
  32. expect(arrayOwnKeys).toHaveLength(1);
  33. expect(arrayOwnKeys[0]).toBe("length");
  34. });
  35. test("array with some values has 'length' and indices own keys", () => {
  36. var arrayOwnKeys = Reflect.ownKeys(["foo", [], 123, undefined]);
  37. expect(arrayOwnKeys instanceof Array).toBeTrue();
  38. expect(arrayOwnKeys).toHaveLength(5);
  39. expect(arrayOwnKeys[0]).toBe("0");
  40. expect(arrayOwnKeys[1]).toBe("1");
  41. expect(arrayOwnKeys[2]).toBe("2");
  42. expect(arrayOwnKeys[3]).toBe("3");
  43. expect(arrayOwnKeys[4]).toBe("length");
  44. });
  45. });