diff --git a/packages/reactivity/__tests__/ref.spec.ts b/packages/reactivity/__tests__/ref.spec.ts index 0158ca0f64a..56863471ad5 100644 --- a/packages/reactivity/__tests__/ref.spec.ts +++ b/packages/reactivity/__tests__/ref.spec.ts @@ -43,6 +43,32 @@ describe('reactivity/ref', () => { expect(fn).toHaveBeenCalledTimes(2) }) + it('ref wrapped in reactive should not track internal _value access', () => { + const a = ref(1) + const b = reactive(a) + let calls = 0 + let dummy + + effect(() => { + calls++ + dummy = b.value // this will observe both b.value and a.value access + }) + expect(calls).toBe(1) + expect(dummy).toBe(1) + + // mutating a.value should only trigger effect once + calls = 0 + a.value = 3 + expect(calls).toBe(1) + expect(dummy).toBe(3) + + // mutating b.value should trigger the effect twice. (once for a.value change and once for b.value change) + calls = 0 + b.value = 5 + expect(calls).toBe(2) + expect(dummy).toBe(5) + }) + it('should make nested properties reactive', () => { const a = ref({ count: 1,