2
0
Evan You 10 жил өмнө
parent
commit
2f79bd26a4

+ 0 - 5
src/core/util/options.js

@@ -285,11 +285,6 @@ export function mergeOptions (
   normalizeComponents(child)
   normalizeProps(child)
   normalizeDirectives(child)
-  if (process.env.NODE_ENV !== 'production') {
-    if (child.propsData && !vm) {
-      warn('propsData can only be used as an instantiation option.')
-    }
-  }
   const extendsFrom = child.extends
   if (extendsFrom) {
     parent = typeof extendsFrom === 'function'

+ 63 - 0
test/unit/features/options/data.spec.js

@@ -0,0 +1,63 @@
+import Vue from 'vue'
+
+describe('Options data', () => {
+  it('should proxy and be reactive', done => {
+    const data = { msg: 'foo' }
+    const vm = new Vue({
+      data,
+      template: '<div>{{ msg }}</div>'
+    }).$mount()
+    expect(vm.$data).toEqual({ msg: 'foo' })
+    expect(vm.$data).toBe(data)
+    data.msg = 'bar'
+    waitForUpdate(() => {
+      expect(vm.$el.textContent).toBe('bar')
+    }).then(done)
+  })
+
+  it('should warn non-function during extend', () => {
+    Vue.extend({
+      data: { msg: 'foo' }
+    })
+    expect('The "data" option should be a function').toHaveBeenWarned()
+  })
+
+  it('should merge data properly', () => {
+    const Test = Vue.extend({
+      data () {
+        return { a: 1 }
+      }
+    })
+    let vm = new Test({
+      data: { b: 2 }
+    })
+    expect(vm.a).toBe(1)
+    expect(vm.b).toBe(2)
+    // no instance data
+    vm = new Test()
+    expect(vm.a).toBe(1)
+    // no child-val
+    const Extended = Test.extend({})
+    vm = new Extended()
+    expect(vm.a).toBe(1)
+    // recursively merge objects
+    const WithObject = Vue.extend({
+      data () {
+        return {
+          obj: {
+            a: 1
+          }
+        }
+      }
+    })
+    vm = new WithObject({
+      data: {
+        obj: {
+          b: 2
+        }
+      }
+    })
+    expect(vm.obj.a).toBe(1)
+    expect(vm.obj.b).toBe(2)
+  })
+})