Skip to content

Commit 2c13ecb

Browse files
committed
fix asset merge overwriting order
1 parent efab5ec commit 2c13ecb

File tree

3 files changed

+13
-4
lines changed

3 files changed

+13
-4
lines changed

gruntfile.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ module.exports = function (grunt) {
2424
src: 'src/**/*.js'
2525
},
2626
test: {
27-
src: ['test/unit/specs/**/*.js']
27+
src: ['test/unit/specs/**/*.js', 'test/e2e/*.js']
2828
}
2929
},
3030

@@ -93,7 +93,7 @@ module.exports = function (grunt) {
9393

9494
grunt.registerTask('unit', ['karma:browsers'])
9595
grunt.registerTask('cover', ['karma:phantom'])
96-
grunt.registerTask('test', ['unit', 'cover'])
96+
grunt.registerTask('test', ['unit', 'cover', 'casper'])
9797
grunt.registerTask('default', ['jshint', 'test', 'build'])
9898

9999
}

src/util/merge-option.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,6 @@ strats.components = function (parentVal, childVal, vm, key) {
112112
? vm.$parent.$options[key]
113113
: _.Vue.options[key]
114114
)
115-
if (childVal) extend(ret, childVal)
116115
if (parentVal) {
117116
var keys = Object.keys(parentVal)
118117
var i = keys.length
@@ -122,6 +121,7 @@ strats.components = function (parentVal, childVal, vm, key) {
122121
ret[field] = parentVal[field]
123122
}
124123
}
124+
if (childVal) extend(ret, childVal)
125125
return ret
126126
}
127127

test/unit/specs/util/merge-option_spec.js

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,15 +101,21 @@ describe('Util - Option merging', function () {
101101
var asset1 = {}
102102
var asset2 = {}
103103
var asset3 = {}
104+
var asset4 = {}
105+
var asset5 = {}
104106
var res = merge(
105107
{ directives: { a: asset1 }},
106108
{ directives: { b: asset2 }}
107109
).directives
108110
expect(res.a).toBe(asset1)
109111
expect(res.b).toBe(asset2)
110112
// vm asset merge should do tree-way merge
113+
var proto = { d: asset5 }
114+
var parent = { directives: Object.create(proto) }
115+
parent.directives.a = asset1
116+
parent.directives.b = asset4
111117
res = merge(
112-
{ directives: { a: asset1 }},
118+
parent,
113119
{ directives: { b: asset2 }},
114120
{
115121
$parent: {
@@ -121,8 +127,11 @@ describe('Util - Option merging', function () {
121127
'directives'
122128
).directives
123129
expect(res.a).toBe(asset1)
130+
// child should overwrite parent
124131
expect(res.b).toBe(asset2)
125132
expect(res.c).toBe(asset3)
133+
// should not copy parent prototype properties
134+
expect(res.d).toBeUndefined()
126135
})
127136

128137
it('guard components', function () {

0 commit comments

Comments
 (0)