Jelajahi Sumber

tests for v-bind object

Evan You 10 tahun lalu
induk
melakukan
5594a7cd3d

+ 12 - 0
test/ssr/ssr-string.spec.js

@@ -348,6 +348,18 @@ describe('SSR: renderToString', () => {
     })
   })
 
+  it('v-bind object', done => {
+    renderVmWithOptions({
+      data: {
+        test: { id: 'a', class: 'b', value: 'c' }
+      },
+      template: '<input v-bind="test">'
+    }, result => {
+      expect(result).toContain('<input id="a" class="b" server-rendered="true" value="c">')
+      done()
+    })
+  })
+
   it('should catch error', done => {
     renderToString(new Vue({
       render () {

+ 55 - 0
test/unit/features/directives/bind.spec.js

@@ -108,4 +108,59 @@ describe('Directive v-bind', () => {
       expect(vm.$el.firstChild.hasAttribute('disabled')).toBe(true)
     }).then(done)
   })
+
+  it('bind object', done => {
+    const vm = new Vue({
+      template: '<input v-bind="test">',
+      data: {
+        test: {
+          id: 'test',
+          class: 'ok',
+          value: 'hello'
+        }
+      }
+    }).$mount()
+    expect(vm.$el.getAttribute('id')).toBe('test')
+    expect(vm.$el.getAttribute('class')).toBe('ok')
+    expect(vm.$el.value).toBe('hello')
+    vm.test.id = 'hi'
+    vm.test.value = 'bye'
+    waitForUpdate(() => {
+      expect(vm.$el.getAttribute('id')).toBe('hi')
+      expect(vm.$el.getAttribute('class')).toBe('ok')
+      expect(vm.$el.value).toBe('bye')
+    }).then(done)
+  })
+
+  it('bind array', done => {
+    const vm = new Vue({
+      template: '<input v-bind="test">',
+      data: {
+        test: [
+          { id: 'test', class: 'ok' },
+          { value: 'hello' }
+        ]
+      }
+    }).$mount()
+    expect(vm.$el.getAttribute('id')).toBe('test')
+    expect(vm.$el.getAttribute('class')).toBe('ok')
+    expect(vm.$el.value).toBe('hello')
+    vm.test[0].id = 'hi'
+    vm.test[1].value = 'bye'
+    waitForUpdate(() => {
+      expect(vm.$el.getAttribute('id')).toBe('hi')
+      expect(vm.$el.getAttribute('class')).toBe('ok')
+      expect(vm.$el.value).toBe('bye')
+    }).then(done)
+  })
+
+  it('warn expect object', () => {
+    const vm = new Vue({
+      template: '<input v-bind="test">',
+      data: {
+        test: 1
+      }
+    }).$mount()
+    expect('v-bind without argument expects an Object or Array value').toHaveBeenWarned()
+  })
 })

+ 7 - 0
test/unit/modules/compiler/codegen.spec.js

@@ -81,6 +81,13 @@ describe('codegen', () => {
     )
   })
 
+  it('generate v-bind directive', () => {
+    assertCodegen(
+      '<p v-bind="test"></p>',
+      `with(this){return _h(_e('p',{hook:{"construct":function(n1,n2){_b(n1,test)}}}))}`
+    )
+  })
+
   it('generate template tag', () => {
     assertCodegen(
       '<template><p>hello world</p></template>',