From 33607406b3dda90e976e982c4a06838e4c082b9f Mon Sep 17 00:00:00 2001 From: "Rong Sen Ng (motss)" Date: Wed, 1 May 2024 20:26:53 +0800 Subject: [PATCH] fix: [#1418] Fix Object.{entries,key,values} on Storage Signed-off-by: Rong Sen Ng (motss) --- .../happy-dom/src/storage/StorageFactory.ts | 3 +- .../happy-dom/test/storage/Storage.test.ts | 45 +++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/packages/happy-dom/src/storage/StorageFactory.ts b/packages/happy-dom/src/storage/StorageFactory.ts index 49997774..b04d3db6 100644 --- a/packages/happy-dom/src/storage/StorageFactory.ts +++ b/packages/happy-dom/src/storage/StorageFactory.ts @@ -82,11 +82,12 @@ export default class StorageFactory { ) { return; } + return { value: storage[PropertySymbol.data][key], writable: true, enumerable: true, - configurable: false + configurable: true }; } }); diff --git a/packages/happy-dom/test/storage/Storage.test.ts b/packages/happy-dom/test/storage/Storage.test.ts index cffa1a6d..fcb72849 100644 --- a/packages/happy-dom/test/storage/Storage.test.ts +++ b/packages/happy-dom/test/storage/Storage.test.ts @@ -141,6 +141,51 @@ describe('Storage', () => { }); }); + describe('Object.keys()', () => { + it(`Returns an array of storage's own enumerable string-keyed property names.`, () => { + storage.setItem('key1', 'value1'); + storage.setItem('key2', 'value2'); + + expect(storage.length).toBe(2); + expect(storage.getItem('key1')).toBe('value1'); + expect(storage.getItem('key2')).toBe('value2'); + expect(storage['key1']).toBe('value1'); + expect(storage['key2']).toBe('value2'); + expect(Object.keys(storage)).toEqual(['key1', 'key2']); + }); + }); + + describe('Object.values()', () => { + it(`Returns an array of storage's own enumerable string-keyed property values.`, () => { + storage.setItem('key1', 'value1'); + storage.setItem('key2', 'value2'); + + expect(storage.length).toBe(2); + expect(storage.getItem('key1')).toBe('value1'); + expect(storage.getItem('key2')).toBe('value2'); + expect(storage['key1']).toBe('value1'); + expect(storage['key2']).toBe('value2'); + expect(Object.values(storage)).toEqual(['value1', 'value2']); + }); + }); + + describe('Object.entries()', () => { + it(`Returns an array of storage's own enumerable string-keyed property key-value pairs.`, () => { + storage.setItem('key1', 'value1'); + storage.setItem('key2', 'value2'); + + expect(storage.length).toBe(2); + expect(storage.getItem('key1')).toBe('value1'); + expect(storage.getItem('key2')).toBe('value2'); + expect(storage['key1']).toBe('value1'); + expect(storage['key2']).toBe('value2'); + expect(Object.entries(storage)).toEqual([ + ['key1', 'value1'], + ['key2', 'value2'] + ]); + }); + }); + describe('vi.spyOn()', () => { it('Should spy on a method.', () => { const spy = vi.spyOn(storage, 'getItem');