Skip to content

Commit

Permalink
fix: [capricorn86#1418] Fix Object.{entries,key,values} on Storage
Browse files Browse the repository at this point in the history
Signed-off-by: Rong Sen Ng (motss) <wes.ngrongsen@gmail.com>
  • Loading branch information
motss committed May 1, 2024
1 parent c29f36c commit 3360740
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 1 deletion.
3 changes: 2 additions & 1 deletion packages/happy-dom/src/storage/StorageFactory.ts
Expand Up @@ -82,11 +82,12 @@ export default class StorageFactory {
) {
return;
}

return {
value: storage[PropertySymbol.data][key],
writable: true,
enumerable: true,
configurable: false
configurable: true
};
}
});
Expand Down
45 changes: 45 additions & 0 deletions packages/happy-dom/test/storage/Storage.test.ts
Expand Up @@ -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');
Expand Down

0 comments on commit 3360740

Please sign in to comment.