it('render vnode with basic reserved tag using createElement', () => { const vm = new Vue({ data: { msg: 'hello world' } }) const h = vm.$createElement const vnode = h('p', {}) expect(vnode.tag).toBe('p') expect(vnode.data).toEqual({}) expect(vnode.children).toBeUndefined() expect(vnode.text).toBeUndefined() expect(vnode.elm).toBeUndefined() expect(vnode.ns).toBeUndefined() expect(vnode.context).toEqual(vm) })
it('function shorthand', done => { const spy = jasmine.createSpy('directive') const vm = new Vue({ template: '<div v-test:arg.hello="a"></div>', data: { a: 'foo' }, directives: { test (el, binding, vnode) { expect(vnode.context).toBe(vm) expect(binding.arg).toBe('arg') expect(binding.modifiers).toEqual({ hello: true }) spy(binding.value, binding.oldValue) } } }) vm.$mount() expect(spy).toHaveBeenCalledWith('foo', undefined) vm.a = 'bar' waitForUpdate(() => { expect(spy).toHaveBeenCalledWith('bar', 'foo') }).then(done) })
it('render vnode with not string tag using createElement', () => { const vm = new Vue({ data: { msg: 'hello world' } }) const h = vm.$createElement const vnode = h(Vue.extend({ // Component class props: ['msg'] }), { props: { msg: vm.message }}) expect(vnode.tag).toMatch(/vue-component-[0-9]+/) expect(vnode.componentOptions.propsData).toEqual({ msg: vm.message }) expect(vnode.children).toBeUndefined() expect(vnode.text).toBeUndefined() expect(vnode.elm).toBeUndefined() expect(vnode.ns).toBeUndefined() expect(vnode.context).toEqual(vm) })
it('render vnode with component using createElement', () => { const vm = new Vue({ data: { message: 'hello world' }, components: { 'my-component': { props: ['msg'] } } }) const h = vm.$createElement const vnode = h('my-component', { props: { msg: vm.message }}) expect(vnode.tag).toMatch(/vue-component-[0-9]+/) expect(vnode.componentOptions.propsData).toEqual({ msg: vm.message }) expect(vnode.children).toBeUndefined() expect(vnode.text).toBeUndefined() expect(vnode.elm).toBeUndefined() expect(vnode.ns).toBeUndefined() expect(vnode.context).toEqual(vm) })
it('function shorthand (global)', done => { const spy = jasmine.createSpy('directive') Vue.directive('test', function (el, binding, vnode) { expect(vnode.context).toBe(vm) expect(binding.arg).toBe('arg') expect(binding.modifiers).toEqual({ hello: true }) spy(binding.value, binding.oldValue) }) const vm = new Vue({ template: '<div v-test:arg.hello="a"></div>', data: { a: 'foo' } }) vm.$mount() expect(spy).toHaveBeenCalledWith('foo', undefined) vm.a = 'bar' waitForUpdate(() => { expect(spy).toHaveBeenCalledWith('bar', 'foo') delete Vue.options.directives.test }).then(done) })
it('render vnode with custom tag using createElement', () => { const vm = new Vue({ data: { msg: 'hello world' } }) const h = vm.$createElement const tag = 'custom-tag' const vnode = h(tag, {}) expect(vnode.tag).toBe('custom-tag') expect(vnode.data).toEqual({}) expect(vnode.children).toBeUndefined() expect(vnode.text).toBeUndefined() expect(vnode.elm).toBeUndefined() expect(vnode.ns).toBeUndefined() expect(vnode.context).toEqual(vm) expect(vnode.componentOptions).toBeUndefined() })
it('render vnode with basic reserved tag using createElement', () => { const vm = new Vue({ data: { msg: 'hello world' } }) const h = vm.$createElement const vnode = h('p', {}) expect(vnode.tag).toBe('p') expect(vnode.data).toEqual({}) expect(vnode.children).toBeUndefined() expect(vnode.text).toBeUndefined() expect(vnode.elm).toBeUndefined() expect(vnode.ns).toBeUndefined() expect(vnode.context).toEqual(vm) })
it('render vnode with custom tag using createElement', () => { const vm = new Vue({ data: { msg: 'hello world' } }) const h = vm.$createElement const tag = 'custom-tag' const vnode = h(tag, {}) expect(vnode.tag).toBe('custom-tag') expect(vnode.data).toEqual({}) expect(vnode.children).toBeUndefined() expect(vnode.text).toBeUndefined() expect(vnode.elm).toBeUndefined() expect(vnode.ns).toBeUndefined() expect(vnode.context).toEqual(vm) expect(vnode.componentOptions).toBeUndefined() })
it('render vnode with not string tag using createElement', () => { const vm = new Vue({ data: { msg: 'hello world' } }) const h = vm.$createElement const vnode = h(Vue.extend({ // Component class props: ['msg'] }), { props: { msg: vm.message }}) expect(vnode.tag).toMatch(/vue-component-[0-9]+/) expect(vnode.componentOptions.propsData).toEqual({ msg: vm.message }) expect(vnode.children).toBeUndefined() expect(vnode.text).toBeUndefined() expect(vnode.elm).toBeUndefined() expect(vnode.ns).toBeUndefined() expect(vnode.context).toEqual(vm) })
it('render vnode with component using createElement', () => { const vm = new Vue({ data: { message: 'hello world' }, components: { 'my-component': { props: ['msg'] } } }) const h = vm.$createElement const vnode = h('my-component', { props: { msg: vm.message }}) expect(vnode.tag).toMatch(/vue-component-[0-9]+/) expect(vnode.componentOptions.propsData).toEqual({ msg: vm.message }) expect(vnode.children).toBeUndefined() expect(vnode.text).toBeUndefined() expect(vnode.elm).toBeUndefined() expect(vnode.ns).toBeUndefined() expect(vnode.context).toEqual(vm) })
it('function shorthand', done => { const spy = jasmine.createSpy('directive') const vm = new Vue({ template: '<div v-test:arg.hello="a"></div>', data: { a: 'foo' }, directives: { test (el, binding, vnode) { expect(vnode.context).toBe(vm) expect(binding.arg).toBe('arg') expect(binding.modifiers).toEqual({ hello: true }) spy(binding.value, binding.oldValue) } } }) vm.$mount() expect(spy).toHaveBeenCalledWith('foo', undefined) vm.a = 'bar' waitForUpdate(() => { expect(spy).toHaveBeenCalledWith('bar', 'foo') }).then(done) })
it('function shorthand (global)', done => { const spy = jasmine.createSpy('directive') Vue.directive('test', function (el, binding, vnode) { expect(vnode.context).toBe(vm) expect(binding.arg).toBe('arg') expect(binding.modifiers).toEqual({ hello: true }) spy(binding.value, binding.oldValue) }) const vm = new Vue({ template: '<div v-test:arg.hello="a"></div>', data: { a: 'foo' } }) vm.$mount() expect(spy).toHaveBeenCalledWith('foo', undefined) vm.a = 'bar' waitForUpdate(() => { expect(spy).toHaveBeenCalledWith('bar', 'foo') delete Vue.options.directives.test }).then(done) })