import Vue from 'vue' function trigger (target, event, process) { var e = document.createEvent('HTMLEvents') e.initEvent(event, true, true) if (process) process(e) target.dispatchEvent(e) return e } describe('Directive v-on', () => { let vm, spy, spy2, el beforeEach(() => { spy = jasmine.createSpy() spy2 = jasmine.createSpy() el = document.createElement('div') document.body.appendChild(el) }) afterEach(() => { document.body.removeChild(vm.$el) }) it('should bind event to a method', () => { vm = new Vue({ el, template: '
', methods: { foo: spy } }) trigger(vm.$el, 'click') expect(spy.calls.count()).toBe(1) const args = spy.calls.allArgs() const event = args[0] && args[0][0] || {} expect(event.type).toBe('click') }) it('should bind event to a inline method', () => { vm = new Vue({ el, template: '', methods: { foo: spy } }) trigger(vm.$el, 'click') expect(spy.calls.count()).toBe(1) const args = spy.calls.allArgs() const firstArgs = args[0] expect(firstArgs.length).toBe(4) expect(firstArgs[0]).toBe(1) expect(firstArgs[1]).toBe(2) expect(firstArgs[2]).toBe(3) expect(firstArgs[3].type).toBe('click') }) it('should support shorthand', () => { vm = new Vue({ el, template: '', methods: { foo: spy } }) trigger(vm.$el, 'click') expect(spy.calls.count()).toBe(1) }) it('should support stop propagation', () => { vm = new Vue({ el, template: ` `, methods: { foo: spy } }) const hash = window.location.hash trigger(vm.$el, 'click') expect(window.location.hash).toBe(hash) }) it('should support prevent default', () => { vm = new Vue({ el, template: `