| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- import Vue from 'vue'
- describe('Options directives', () => {
- it('basic usage', done => {
- const bindSpy = jasmine.createSpy('bind')
- const updateSpy = jasmine.createSpy('update')
- const componentUpdatedSpy = jasmine.createSpy('componentUpdated')
- const unbindSpy = jasmine.createSpy('unbind')
- const assertContext = (el, binding, vnode) => {
- expect(vnode.context).toBe(vm)
- expect(binding.arg).toBe('arg')
- expect(binding.modifiers).toEqual({ hello: true })
- }
- const vm = new Vue({
- template: '<div v-if="ok" v-test:arg.hello="a">{{ msg }}</div>',
- data: {
- msg: 'hi',
- a: 'foo',
- ok: true
- },
- directives: {
- test: {
- bind (el, binding, vnode) {
- bindSpy()
- assertContext(el, binding, vnode)
- expect(binding.value).toBe('foo')
- expect(binding.expression).toBe('a')
- expect(binding.oldValue).toBeUndefined()
- },
- update (el, binding, vnode, oldVnode) {
- updateSpy()
- assertContext(el, binding, vnode)
- expect(el).toBe(vm.$el)
- expect(oldVnode).toBe(vm._vnode)
- expect(oldVnode).not.toBe(vnode)
- expect(binding.value).toBe('bar')
- expect(binding.oldValue).toBe('foo')
- expect(binding.expression).toBe('a')
- },
- componentUpdated (el, binding, vnode) {
- componentUpdatedSpy()
- assertContext(el, binding, vnode)
- },
- unbind (el, binding, vnode) {
- unbindSpy()
- assertContext(el, binding, vnode)
- }
- }
- }
- })
- vm.$mount()
- expect(bindSpy).toHaveBeenCalled()
- expect(updateSpy).not.toHaveBeenCalled()
- expect(componentUpdatedSpy).not.toHaveBeenCalled()
- expect(unbindSpy).not.toHaveBeenCalled()
- vm.a = 'bar'
- waitForUpdate(() => {
- expect(updateSpy).toHaveBeenCalled()
- expect(componentUpdatedSpy).toHaveBeenCalled()
- expect(unbindSpy).not.toHaveBeenCalled()
- vm.msg = 'bye'
- }).then(() => {
- expect(componentUpdatedSpy.calls.count()).toBe(2)
- vm.ok = false
- }).then(() => {
- expect(unbindSpy).toHaveBeenCalled()
- }).then(done)
- })
- 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('warn non-existent', () => {
- new Vue({
- template: '<div v-test></div>'
- }).$mount()
- expect('Failed to resolve directive: test').toHaveBeenWarned()
- })
- })
|