Просмотр исходного кода

fix asset merge overwriting order

Evan You 11 лет назад
Родитель
Сommit
2c13ecb251
3 измененных файлов с 13 добавлено и 4 удалено
  1. 2 2
      gruntfile.js
  2. 1 1
      src/util/merge-option.js
  3. 10 1
      test/unit/specs/util/merge-option_spec.js

+ 2 - 2
gruntfile.js

@@ -24,7 +24,7 @@ module.exports = function (grunt) {
         src: 'src/**/*.js'
       },
       test: {
-        src: ['test/unit/specs/**/*.js']
+        src: ['test/unit/specs/**/*.js', 'test/e2e/*.js']
       }
     },
 
@@ -93,7 +93,7 @@ module.exports = function (grunt) {
 
   grunt.registerTask('unit', ['karma:browsers'])
   grunt.registerTask('cover', ['karma:phantom'])
-  grunt.registerTask('test', ['unit', 'cover'])
+  grunt.registerTask('test', ['unit', 'cover', 'casper'])
   grunt.registerTask('default', ['jshint', 'test', 'build'])
 
 }

+ 1 - 1
src/util/merge-option.js

@@ -112,7 +112,6 @@ strats.components = function (parentVal, childVal, vm, key) {
       ? vm.$parent.$options[key]
       : _.Vue.options[key]
   )
-  if (childVal) extend(ret, childVal)
   if (parentVal) {
     var keys = Object.keys(parentVal)
     var i = keys.length
@@ -122,6 +121,7 @@ strats.components = function (parentVal, childVal, vm, key) {
       ret[field] = parentVal[field]
     }
   }
+  if (childVal) extend(ret, childVal)
   return ret
 }
 

+ 10 - 1
test/unit/specs/util/merge-option_spec.js

@@ -101,6 +101,8 @@ describe('Util - Option merging', function () {
     var asset1 = {}
     var asset2 = {}
     var asset3 = {}
+    var asset4 = {}
+    var asset5 = {}
     var res = merge(
       { directives: { a: asset1 }},
       { directives: { b: asset2 }}
@@ -108,8 +110,12 @@ describe('Util - Option merging', function () {
     expect(res.a).toBe(asset1)
     expect(res.b).toBe(asset2)
     // vm asset merge should do tree-way merge
+    var proto = { d: asset5 }
+    var parent = { directives: Object.create(proto) }
+    parent.directives.a = asset1
+    parent.directives.b = asset4
     res = merge(
-      { directives: { a: asset1 }},
+      parent,
       { directives: { b: asset2 }},
       {
         $parent: {
@@ -121,8 +127,11 @@ describe('Util - Option merging', function () {
       'directives'
     ).directives
     expect(res.a).toBe(asset1)
+    // child should overwrite parent
     expect(res.b).toBe(asset2)
     expect(res.c).toBe(asset3)
+    // should not copy parent prototype properties
+    expect(res.d).toBeUndefined()
   })
 
   it('guard components', function () {