@@ -10,6 +10,47 @@ describe('v-memo', () => {
10
10
return [ el , vm ]
11
11
}
12
12
13
+ test ( 'on with external array' , async ( ) => {
14
+ const [ el , vm ] = mount ( {
15
+ template : `<div v-memo="arr">{{ arr[0] }} {{ arr[1] }} {{arr[2] ?? '_' }} ({{c}})</div>{{c}}` ,
16
+ data : ( ) => ( { arr : [ 0 , 0 ] , c : 0 } )
17
+ } )
18
+ expect ( el . innerHTML ) . toBe ( `<div>0 0 _ (0)</div>0` )
19
+
20
+ let [ x , y , z ] = [ 0 , 1 , 2 ]
21
+
22
+ // change at index x - should update
23
+ vm . arr [ x ] ++
24
+ vm . c ++
25
+ await nextTick ( )
26
+ expect ( el . innerHTML ) . toBe ( `<div>1 0 _ (1)</div>1` )
27
+
28
+ // change at index y - should update
29
+ vm . arr [ y ] ++
30
+ vm . c ++
31
+ await nextTick ( )
32
+ expect ( el . innerHTML ) . toBe ( `<div>1 1 _ (2)</div>2` )
33
+
34
+ // noop change - should NOT update
35
+ vm . arr [ x ] = vm . arr [ 0 ]
36
+ vm . arr [ y ] = vm . arr [ 1 ]
37
+ vm . c ++
38
+ await nextTick ( )
39
+ expect ( el . innerHTML ) . toBe ( `<div>1 1 _ (2)</div>3` )
40
+
41
+ // add item 3rd item - should update
42
+ vm . arr [ z ] = 0
43
+ vm . c ++
44
+ await nextTick ( )
45
+ expect ( el . innerHTML ) . toBe ( `<div>1 1 0 (4)</div>4` )
46
+
47
+ // remove 3rd item - should update
48
+ vm . arr = vm . arr . slice ( 0 , vm . arr . length - 1 )
49
+ vm . c ++
50
+ await nextTick ( )
51
+ expect ( el . innerHTML ) . toBe ( `<div>1 1 _ (5)</div>5` )
52
+ } )
53
+
13
54
test ( 'on normal element' , async ( ) => {
14
55
const [ el , vm ] = mount ( {
15
56
template : `<div v-memo="[x]">{{ x }} {{ y }}</div>` ,
0 commit comments