From 4eb97a22448685f0d8ce38a9cc6eb6021c4b0ef7 Mon Sep 17 00:00:00 2001 From: Henry Lin Date: Wed, 31 May 2023 19:05:10 +0800 Subject: [PATCH] test: test for invalid sources in watch --- src/__tests__/core.test.tsx | 54 +++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/src/__tests__/core.test.tsx b/src/__tests__/core.test.tsx index 83ef49c..901a99a 100644 --- a/src/__tests__/core.test.tsx +++ b/src/__tests__/core.test.tsx @@ -636,6 +636,60 @@ describe('watch', () => { expect(effectFn).toBeCalledTimes(1); }); + it('warns about invalid source', () => { + const obj = { nested: { a: 1 } }; + const effectFn = jest.fn(); + + const runner = watch(obj, (...args) => { + effectFn(...args); + }); + + expect(effectFn).toBeCalledTimes(0); + + obj.nested.a++; + + expect(effectFn).toBeCalledTimes(0); + + runner(); + obj.nested.a++; + + expect(effectFn).toBeCalledTimes(0); + + expect(consoleWarn).toBeCalled(); + }); + it('warns about invalid source in array', () => { + const counter = ref(1); + const obj = { a: 1, nested: { b: 2 } }; + const obj2 = reactive({ a: 1, nested: { b: 2 } }); + const effectFn = jest.fn(); + + const runner = watch([counter, obj, () => obj2.a], (...args) => { + effectFn(...args); + }); + + expect(effectFn).toBeCalledTimes(0); + + counter.value++; + + expect(effectFn).toBeCalledTimes(1); + expect(effectFn).toBeCalledWith([2, obj, 1], [1, obj, 1]); + + obj.nested.b++; + + expect(effectFn).toBeCalledTimes(1); + + obj2.a++; + + expect(effectFn).toBeCalledTimes(2); + expect(effectFn).toBeCalledWith([2, obj, 2], [2, obj, 1]); + + runner(); + obj.nested.b++; + + expect(effectFn).toBeCalledTimes(2); + + expect(consoleWarn).toBeCalled(); + }); }); describe('useWatch', () => {