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', () => {