function shouldThrow(func, errorMessage) { var errorThrown = false; var error = null; try { func(); } catch (e) { errorThrown = true; error = e; } if (!errorThrown) throw new Error('not thrown'); if (String(error) !== errorMessage) throw new Error(`bad error: ${String(error)}`); } // This test just ensure that proxy.[[Get]]'s throwing works correctly with JSON.stringify. var proxy = new Proxy([0, 1, 2, 3], { get: function (target, name) { if (name === '2') throw new Error('ng'); return target[name]; } }); shouldThrow(() => { JSON.stringify(proxy); }, `Error: ng`);