model-checkbox.spec.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. import Vue from 'vue'
  2. describe('Directive v-model checkbox', () => {
  3. it('should work', done => {
  4. const vm = new Vue({
  5. data: {
  6. test: true
  7. },
  8. template: '<input type="checkbox" v-model="test">'
  9. }).$mount()
  10. document.body.appendChild(vm.$el)
  11. expect(vm.$el.checked).toBe(true)
  12. vm.test = false
  13. waitForUpdate(function () {
  14. expect(vm.$el.checked).toBe(false)
  15. expect(vm.test).toBe(false)
  16. vm.$el.click()
  17. expect(vm.$el.checked).toBe(true)
  18. expect(vm.test).toBe(true)
  19. }).then(() => {
  20. document.body.removeChild(vm.$el)
  21. }).then(done)
  22. })
  23. it('should respect value bindings', done => {
  24. const vm = new Vue({
  25. data: {
  26. test: 1,
  27. a: 1,
  28. b: 2
  29. },
  30. template: '<input type="checkbox" v-model="test" :true-value="a" :false-value="b">'
  31. }).$mount()
  32. document.body.appendChild(vm.$el)
  33. expect(vm.$el.checked).toBe(true)
  34. vm.$el.click()
  35. expect(vm.$el.checked).toBe(false)
  36. expect(vm.test).toBe(2)
  37. vm.$el.click()
  38. expect(vm.$el.checked).toBe(true)
  39. expect(vm.test).toBe(1)
  40. vm.test = 2
  41. waitForUpdate(() => {
  42. expect(vm.$el.checked).toBe(false)
  43. vm.test = 1
  44. }).then(() => {
  45. expect(vm.$el.checked).toBe(true)
  46. document.body.removeChild(vm.$el)
  47. }).then(done)
  48. })
  49. it('bind to Array value', done => {
  50. const vm = new Vue({
  51. data: {
  52. test: ['1']
  53. },
  54. template: `
  55. <div>
  56. <input type="checkbox" v-model="test" value="1">
  57. <input type="checkbox" v-model="test" value="2">
  58. </div>
  59. `
  60. }).$mount()
  61. document.body.appendChild(vm.$el)
  62. expect(vm.$el.children[0].checked).toBe(true)
  63. expect(vm.$el.children[1].checked).toBe(false)
  64. vm.$el.children[0].click()
  65. expect(vm.test.length).toBe(0)
  66. vm.$el.children[1].click()
  67. expect(vm.test).toEqual(['2'])
  68. vm.$el.children[0].click()
  69. expect(vm.test).toEqual(['2', '1'])
  70. vm.test = ['1']
  71. waitForUpdate(() => {
  72. expect(vm.$el.children[0].checked).toBe(true)
  73. expect(vm.$el.children[1].checked).toBe(false)
  74. }).then(done)
  75. })
  76. it('bind to Array value with value bindings', done => {
  77. const vm = new Vue({
  78. data: {
  79. test: [1]
  80. },
  81. template: `
  82. <div>
  83. <input type="checkbox" v-model="test" :value="1">
  84. <input type="checkbox" v-model="test" :value="2">
  85. </div>
  86. `
  87. }).$mount()
  88. document.body.appendChild(vm.$el)
  89. expect(vm.$el.children[0].checked).toBe(true)
  90. expect(vm.$el.children[1].checked).toBe(false)
  91. vm.$el.children[0].click()
  92. expect(vm.test.length).toBe(0)
  93. vm.$el.children[1].click()
  94. expect(vm.test).toEqual([2])
  95. vm.$el.children[0].click()
  96. expect(vm.test).toEqual([2, 1])
  97. vm.test = [1]
  98. waitForUpdate(() => {
  99. expect(vm.$el.children[0].checked).toBe(true)
  100. expect(vm.$el.children[1].checked).toBe(false)
  101. }).then(done)
  102. })
  103. it('warn inline checked', () => {
  104. const vm = new Vue({
  105. template: `<input type="checkbox" v-model="test" checked>`,
  106. data: {
  107. test: false
  108. }
  109. }).$mount()
  110. expect(vm.$el.checked).toBe(false)
  111. expect('inline checked attributes will be ignored when using v-model').toHaveBeenWarned()
  112. })
  113. })