Prechádzať zdrojové kódy

fix child component v-on spec

Evan You 10 rokov pred
rodič
commit
cab88c50bb

+ 6 - 2
src/core/vdom/helpers.js

@@ -51,12 +51,16 @@ export function updateListeners (on, oldOn, add) {
 
 function arrInvoker (arr) {
   return function (ev) {
+    const single = arguments.length === 1
     for (let i = 0; i < arr.length; i++) {
-      arr[i](ev)
+      single ? arr[i](ev) : arr[i].apply(null, arguments)
     }
   }
 }
 
 function fnInvoker (o) {
-  return function (ev) { o.fn(ev) }
+  return function (ev) {
+    const single = arguments.length === 1
+    single ? o.fn(ev) : o.fn.apply(null, arguments)
+  }
 }

+ 4 - 5
test/unit/features/directives/on.spec.js

@@ -117,17 +117,16 @@ describe('Directive v-on', () => {
     expect(callOrder.toString()).toBe('1,2')
   })
 
-  xit('should bind to a child component', () => {
+  it('should bind to a child component', () => {
     Vue.component('bar', {
       template: '<span>Hello</span>'
     })
     vm = new Vue({
       el: '#app',
-      template: '<bar @click="foo"></bar>',
+      template: '<bar @custom="foo"></bar>',
       methods: { foo: spy }
     })
-    const el = vm.$el
-    trigger(el, 'click')
-    expect(spy.calls.count()).toBe(1)
+    vm.$children[0].$emit('custom', 'foo', 'bar')
+    expect(spy).toHaveBeenCalledWith('foo', 'bar')
   })
 })