Browse Source

option extends tests

Evan You 10 years ago
parent
commit
5b18542eea

+ 49 - 0
test/unit/features/options/extends.spec.js

@@ -0,0 +1,49 @@
+import Vue from 'vue'
+
+describe('Options extends', () => {
+  it('should work on objects', () => {
+    const A = {
+      data () {
+        return { a: 1 }
+      }
+    }
+    const B = {
+      extends: A,
+      data () {
+        return { b: 2 }
+      }
+    }
+    const vm = new Vue({
+      extends: B,
+      data: {
+        c: 3
+      }
+    })
+    expect(vm.a).toBe(1)
+    expect(vm.b).toBe(2)
+    expect(vm.c).toBe(3)
+  })
+
+  it('should work on extended constructors', () => {
+    const A = Vue.extend({
+      data () {
+        return { a: 1 }
+      }
+    })
+    const B = Vue.extend({
+      extends: A,
+      data () {
+        return { b: 2 }
+      }
+    })
+    const vm = new Vue({
+      extends: B,
+      data: {
+        c: 3
+      }
+    })
+    expect(vm.a).toBe(1)
+    expect(vm.b).toBe(2)
+    expect(vm.c).toBe(3)
+  })
+})

+ 22 - 0
test/unit/features/options/mixins.spec.js

@@ -87,4 +87,26 @@ describe('Options mixins', () => {
     })
     expect(result.methods.xyz).toBe(f3)
   })
+
+  it('should accept constructors as mixins', () => {
+    const mixin = Vue.extend({
+      directives: {
+        c: {}
+      },
+      methods: {
+        a: function () {}
+      }
+    })
+
+    const vm = new Vue({
+      mixins: [mixin],
+      methods: {
+        b: function () {}
+      }
+    }).$mount()
+
+    expect(vm.a).toBeDefined()
+    expect(vm.b).toBeDefined()
+    expect(vm.$options.directives.c).toBeDefined()
+  })
 })