]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
test: fix cloneVNode ref tests
authorEvan You <yyx990803@gmail.com>
Mon, 14 Sep 2020 22:55:00 +0000 (18:55 -0400)
committerEvan You <yyx990803@gmail.com>
Mon, 14 Sep 2020 22:55:00 +0000 (18:55 -0400)
packages/runtime-core/__tests__/vnode.spec.ts

index 0a08d4f3f5fe7242e4d76b6370f90e3ad95e351c..09d7f54ceaef42286f85ce2941c378ed87d5837a 100644 (file)
@@ -230,20 +230,20 @@ describe('vnode', () => {
 
     setCurrentRenderingInstance(mockInstance1)
     const original = createVNode('div', { ref: 'foo' })
-    expect(original.ref).toEqual([mockInstance1, 'foo'])
+    expect(original.ref).toStrictEqual({ i: mockInstance1, r: 'foo' })
 
     // clone and preserve original ref
     const cloned1 = cloneVNode(original)
-    expect(cloned1.ref).toEqual([mockInstance1, 'foo'])
+    expect(cloned1.ref).toStrictEqual({ i: mockInstance1, r: 'foo' })
 
     // cloning with new ref, but with same context instance
     const cloned2 = cloneVNode(original, { ref: 'bar' })
-    expect(cloned2.ref).toEqual([mockInstance1, 'bar'])
+    expect(cloned2.ref).toStrictEqual({ i: mockInstance1, r: 'bar' })
 
     // cloning and adding ref to original that has no ref
     const original2 = createVNode('div')
     const cloned3 = cloneVNode(original2, { ref: 'bar' })
-    expect(cloned3.ref).toEqual([mockInstance1, 'bar'])
+    expect(cloned3.ref).toStrictEqual({ i: mockInstance1, r: 'bar' })
 
     // cloning with different context instance
     setCurrentRenderingInstance(mockInstance2)
@@ -251,16 +251,35 @@ describe('vnode', () => {
     // clone and preserve original ref
     const cloned4 = cloneVNode(original)
     // #1311 should preserve original context instance!
-    expect(cloned4.ref).toEqual([mockInstance1, 'foo'])
+    expect(cloned4.ref).toStrictEqual({ i: mockInstance1, r: 'foo' })
 
     // cloning with new ref, but with same context instance
     const cloned5 = cloneVNode(original, { ref: 'bar' })
     // new ref should use current context instance and overwrite original
-    expect(cloned5.ref).toEqual([mockInstance2, 'bar'])
+    expect(cloned5.ref).toStrictEqual({ i: mockInstance2, r: 'bar' })
 
     // cloning and adding ref to original that has no ref
     const cloned6 = cloneVNode(original2, { ref: 'bar' })
-    expect(cloned6.ref).toEqual([mockInstance2, 'bar'])
+    expect(cloned6.ref).toStrictEqual({ i: mockInstance2, r: 'bar' })
+
+    setCurrentRenderingInstance(null)
+  })
+
+  test('cloneVNode ref merging', () => {
+    const mockInstance1 = {} as any
+    const mockInstance2 = {} as any
+
+    setCurrentRenderingInstance(mockInstance1)
+    const original = createVNode('div', { ref: 'foo' })
+    expect(original.ref).toStrictEqual({ i: mockInstance1, r: 'foo' })
+
+    // clone and preserve original ref
+    setCurrentRenderingInstance(mockInstance2)
+    const cloned1 = cloneVNode(original, { ref: 'bar' }, true)
+    expect(cloned1.ref).toStrictEqual([
+      { i: mockInstance1, r: 'foo' },
+      { i: mockInstance2, r: 'bar' }
+    ])
 
     setCurrentRenderingInstance(null)
   })