Skip to content

Commit 06a2b2d

Browse files
committed
Add test to detect faulty behaviour
1 parent 50b4b33 commit 06a2b2d

File tree

1 file changed

+36
-10
lines changed

1 file changed

+36
-10
lines changed

packages/utils/test/object.test.ts

Lines changed: 36 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ describe('dropUndefinedKeys()', () => {
200200
});
201201
});
202202

203-
test('objects with circular reference', () => {
203+
test('should not throw on objects with circular reference', () => {
204204
const dog: any = {
205205
food: undefined,
206206
};
@@ -217,11 +217,25 @@ describe('dropUndefinedKeys()', () => {
217217

218218
dog.chases = rat;
219219

220-
expect(dropUndefinedKeys(human)).toStrictEqual({
221-
pets: {
222-
chases: rat,
223-
},
224-
});
220+
const result = dropUndefinedKeys(human);
221+
222+
// Removes undefined keys
223+
expect(Object.keys(result)).toEqual(['pets']);
224+
expect(Object.keys(result.pets)).toEqual(['chases']);
225+
expect(Object.keys(result.pets.chases)).toEqual(['scares', 'weight']);
226+
227+
// Returns new object
228+
expect(human === result).toBe(false);
229+
expect(dog === result.pets).toBe(false);
230+
expect(rat === result.pets.chases).toBe(false);
231+
232+
// Returns new references within objects
233+
expect(human === result.pets.chases.scares).toBe(false);
234+
expect(dog === result.pets.chases.scares.pets).toBe(false);
235+
expect(rat === result.pets.chases.scares.pets.chases).toBe(false);
236+
237+
// Keeps circular reference
238+
expect(result.pets.chases.scares === result).toBe(true);
225239
});
226240

227241
test('arrays with circular reference', () => {
@@ -235,10 +249,22 @@ describe('dropUndefinedKeys()', () => {
235249

236250
egg[0] = chicken;
237251

238-
expect(dropUndefinedKeys(chicken)).toStrictEqual({
239-
lays: egg,
240-
weight: '1kg',
241-
});
252+
const result = dropUndefinedKeys(chicken);
253+
254+
// Removes undefined keys
255+
expect(Object.keys(result)).toEqual(['weight', 'lays']);
256+
expect(Object.keys(result.lays)).toEqual(['0']);
257+
258+
// Returns new objects
259+
expect(chicken === result).toBe(false);
260+
expect(egg === result.lays).toBe(false);
261+
262+
// Returns new references within objects
263+
expect(chicken === result.lays[0]).toBe(false);
264+
expect(egg === result.lays[0].lays).toBe(false);
265+
266+
// Keeps circular reference
267+
expect(result.lays[0] === result).toBe(true);
242268
});
243269
});
244270

0 commit comments

Comments
 (0)