]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
test: basic 2.x compat test case
authorEvan You <yyx990803@gmail.com>
Thu, 20 Sep 2018 03:43:27 +0000 (23:43 -0400)
committerEvan You <yyx990803@gmail.com>
Thu, 20 Sep 2018 03:43:27 +0000 (23:43 -0400)
packages/core/src/componentUtils.ts
packages/vue/__tests__/compat.spec.ts [new file with mode: 0644]
packages/vue/src/index.ts

index 6ef7c27cf0853e524c8cdd2a8a1cd10da63a0bd4..0a4091193962ba61ce23d78aee8b1682e313fcef 100644 (file)
@@ -183,6 +183,11 @@ export function createComponentClassFromOptions(
         set: isGet ? undefined : value.set
       })
     }
+    if (key === 'methods') {
+      for (const method in value) {
+        ;(ObjectComponent.prototype as any)[method] = value[method]
+      }
+    }
   }
   return ObjectComponent as ComponentClass
 }
diff --git a/packages/vue/__tests__/compat.spec.ts b/packages/vue/__tests__/compat.spec.ts
new file mode 100644 (file)
index 0000000..b1aa63c
--- /dev/null
@@ -0,0 +1,32 @@
+;(global as any).__COMPAT__ = true
+
+import Vue from '../src/index'
+
+describe('2.x compat build', async () => {
+  test('should work', async () => {
+    const root = document.createElement('div')
+    document.body.appendChild(root)
+
+    const instance = new Vue({
+      data() {
+        return { count: 0 }
+      },
+      methods: {
+        change() {
+          this.count++
+        }
+      },
+      render(h: any) {
+        return h('div', this.count)
+      }
+    }).$mount(root)
+
+    expect(instance.count).toBe(0)
+    expect(root.textContent).toBe('0')
+
+    instance.change()
+    expect(instance.count).toBe(1)
+    await Vue.nextTick()
+    expect(root.textContent).toBe('1')
+  })
+})
index a29912cbdda1d39bf97d2a073dd108d0b22e6158..437f31a5f7cae3522fa0caa9aad5ee126ab15e22 100644 (file)
@@ -1,6 +1,7 @@
 import {
   h,
   render,
+  nextTick,
   Component,
   ComponentOptions,
   createComponentInstance
@@ -9,8 +10,9 @@ import {
 class Vue extends Component {
   static h = h
   static render = render
+  static nextTick = nextTick
 
-  constructor(options: ComponentOptions & { el: any }) {
+  constructor(options: ComponentOptions & { el?: any }) {
     super()
     if (!options) {
       return
@@ -21,7 +23,7 @@ class Vue extends Component {
     vnode.children = instance
 
     function mount(el: any) {
-      const dom = document.querySelector(el)
+      const dom = typeof el === 'string' ? document.querySelector(el) : el
       render(vnode, dom)
       return instance.$proxy
     }