@@ -5,11 +5,12 @@ import {
55 isReadonly ,
66 WritableComputedRef ,
77 DebuggerEvent ,
8- TrackOpTypes
8+ TrackOpTypes ,
9+ TriggerOpTypes
910} from 'v3'
1011import { effect } from 'v3/reactivity/effect'
1112import { nextTick } from 'core/util'
12- // import { TrackOpTypes, TriggerOpTypes } from 'v3/reactivity/operations '
13+ import { set , del } from 'core/observer/index '
1314
1415describe ( 'reactivity/computed' , ( ) => {
1516 it ( 'should return updated value' , ( ) => {
@@ -252,40 +253,49 @@ describe('reactivity/computed', () => {
252253 ] )
253254 } )
254255
255- // TODO
256- // it('debug: onTrigger', () => {
257- // let events: DebuggerEvent[] = []
258- // const onTrigger = vi.fn((e: DebuggerEvent) => {
259- // events.push(e)
260- // })
261- // const obj = reactive({ foo: 1 })
262- // const c = computed(() => obj.foo, { onTrigger })
263-
264- // // computed won't trigger compute until accessed
265- // c.value
266-
267- // obj.foo++
268- // expect(c.value).toBe(2)
269- // expect(onTrigger).toHaveBeenCalledTimes(1)
270- // expect(events[0]).toEqual({
271- // effect: c.effect,
272- // target: toRaw(obj),
273- // type: TriggerOpTypes.SET,
274- // key: 'foo',
275- // oldValue: 1,
276- // newValue: 2
277- // })
278-
279- // // @ts -ignore
280- // delete obj.foo
281- // expect(c.value).toBeUndefined()
282- // expect(onTrigger).toHaveBeenCalledTimes(2)
283- // expect(events[1]).toEqual({
284- // effect: c.effect,
285- // target: toRaw(obj),
286- // type: TriggerOpTypes.DELETE,
287- // key: 'foo',
288- // oldValue: 2
289- // })
290- // })
256+ it ( 'debug: onTrigger' , ( ) => {
257+ let events : DebuggerEvent [ ] = [ ]
258+ const onTrigger = vi . fn ( ( e : DebuggerEvent ) => {
259+ events . push ( e )
260+ } )
261+ const obj = reactive ( { foo : 1 , bar : { baz : 2 } } )
262+ const c = computed ( ( ) => obj . foo + ( obj . bar . baz || 0 ) , { onTrigger } )
263+
264+ // computed won't trigger compute until accessed
265+ c . value
266+
267+ obj . foo ++
268+ expect ( c . value ) . toBe ( 4 )
269+ expect ( onTrigger ) . toHaveBeenCalledTimes ( 1 )
270+ expect ( events [ 0 ] ) . toEqual ( {
271+ effect : c . effect ,
272+ target : obj ,
273+ type : TriggerOpTypes . SET ,
274+ key : 'foo' ,
275+ oldValue : 1 ,
276+ newValue : 2
277+ } )
278+
279+ del ( obj . bar , 'baz' )
280+ expect ( c . value ) . toBe ( 2 )
281+ expect ( onTrigger ) . toHaveBeenCalledTimes ( 2 )
282+ expect ( events [ 1 ] ) . toEqual ( {
283+ effect : c . effect ,
284+ target : obj . bar ,
285+ type : TriggerOpTypes . DELETE ,
286+ key : 'baz'
287+ } )
288+
289+ set ( obj . bar , 'baz' , 1 )
290+ expect ( c . value ) . toBe ( 3 )
291+ expect ( onTrigger ) . toHaveBeenCalledTimes ( 3 )
292+ expect ( events [ 2 ] ) . toEqual ( {
293+ effect : c . effect ,
294+ target : obj . bar ,
295+ type : TriggerOpTypes . ADD ,
296+ key : 'baz' ,
297+ oldValue : undefined ,
298+ newValue : 1
299+ } )
300+ } )
291301} )
0 commit comments