diff --git a/packages/shared/__tests__/toDisplayString.spec.ts b/packages/shared/__tests__/toDisplayString.spec.ts index 385e40e3..53cfcb87 100644 --- a/packages/shared/__tests__/toDisplayString.spec.ts +++ b/packages/shared/__tests__/toDisplayString.spec.ts @@ -19,9 +19,46 @@ describe('toDisplayString', () => { expect(toDisplayString(obj)).toBe(JSON.stringify(obj, null, 2)) const arr = [obj] expect(toDisplayString(arr)).toBe(JSON.stringify(arr, null, 2)) - const foo = Object.create(null) - foo.bar = 1 - expect(toDisplayString(foo)).toBe(JSON.stringify(foo, null, 2)) + + const objWithToStringOverride = { + foo: 555, + toString() { + return 'override' + } + } + expect(toDisplayString(objWithToStringOverride)).toBe('override') + + const objWithNonInvokeableToString = { + foo: 555, + toString: null + } + expect(toDisplayString(objWithNonInvokeableToString)).toBe( + `{ + "foo": 555, + "toString": null +}` + ) + + // object created from null does not have .toString in its prototype + const nullObjectWithoutToString = Object.create(null) + nullObjectWithoutToString.bar = 1 + expect(toDisplayString(nullObjectWithoutToString)).toBe( + `{ + "bar": 1 +}` + ) + + // array toString override is ignored + const arrWithToStringOverride = [1, 2, 3] + arrWithToStringOverride.toString = () => + 'override for array is not supported' + expect(toDisplayString(arrWithToStringOverride)).toBe( + `[ + 1, + 2, + 3 +]` + ) }) test('refs', () => {