From 40cb14aea0628f4ac0b53812e49a5c0b458004c1 Mon Sep 17 00:00:00 2001 From: ygj6 Date: Wed, 14 Jul 2021 17:08:59 +0800 Subject: [PATCH] fix(mockReactivityDeep): add parameter seen for mockReactivityDeep. (#759) --- src/reactivity/reactive.ts | 2 +- test/ssr/ssrReactive.spec.ts | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/reactivity/reactive.ts b/src/reactivity/reactive.ts index 86f3e063..2914d1e8 100644 --- a/src/reactivity/reactive.ts +++ b/src/reactivity/reactive.ts @@ -150,7 +150,7 @@ function mockReactivityDeep(obj: any, seen = new Set()) { ) { continue } - mockReactivityDeep(value) + mockReactivityDeep(value, seen) } } diff --git a/test/ssr/ssrReactive.spec.ts b/test/ssr/ssrReactive.spec.ts index fd329827..90ec277a 100644 --- a/test/ssr/ssrReactive.spec.ts +++ b/test/ssr/ssrReactive.spec.ts @@ -11,10 +11,14 @@ import { isRef, set, shallowRef, + getCurrentInstance, + nextTick, } from '../../src' import { createRenderer } from 'vue-server-renderer' +import { mockWarn } from '../helpers' describe('SSR Reactive', () => { + mockWarn(true) beforeEach(() => { process.env.VUE_ENV = 'server' }) @@ -118,4 +122,27 @@ describe('SSR Reactive', () => { set(state.value, 'new', ref(true)) expect(JSON.stringify(state.value)).toBe('{"old":false,"new":true}') }) + + // test the input parameter of mockReactivityDeep + it('ssr should not RangeError: Maximum call stack size exceeded', async () => { + new Vue({ + setup() { + // @ts-expect-error + const app = getCurrentInstance().proxy + let mockNt: any = [] + mockNt.__ob__ = {} + const test = reactive({ + app, + mockNt, + }) + return { + test, + } + }, + }) + await nextTick() + expect( + `"RangeError: Maximum call stack size exceeded"` + ).not.toHaveBeenWarned() + }) })