computed.spec.js 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. import Vue from 'vue'
  2. describe('Options computed', () => {
  3. it('basic usage', done => {
  4. const vm = new Vue({
  5. template: '<div>{{ b }}</div>',
  6. data: {
  7. a: 1
  8. },
  9. computed: {
  10. b () {
  11. return this.a + 1
  12. }
  13. }
  14. }).$mount()
  15. expect(vm.b).toBe(2)
  16. expect(vm.$el.textContent).toBe('2')
  17. vm.a = 2
  18. expect(vm.b).toBe(3)
  19. waitForUpdate(() => {
  20. expect(vm.$el.textContent).toBe('3')
  21. }).then(done)
  22. })
  23. it('with setter', done => {
  24. const vm = new Vue({
  25. template: '<div>{{ b }}</div>',
  26. data: {
  27. a: 1
  28. },
  29. computed: {
  30. b: {
  31. get () { return this.a + 1 },
  32. set (v) { this.a = v - 1 }
  33. }
  34. }
  35. }).$mount()
  36. expect(vm.b).toBe(2)
  37. expect(vm.$el.textContent).toBe('2')
  38. vm.a = 2
  39. expect(vm.b).toBe(3)
  40. waitForUpdate(() => {
  41. expect(vm.$el.textContent).toBe('3')
  42. vm.b = 1
  43. expect(vm.a).toBe(0)
  44. }).then(() => {
  45. expect(vm.$el.textContent).toBe('1')
  46. }).then(done)
  47. })
  48. it('watching computed', done => {
  49. const spy = jasmine.createSpy('watch computed')
  50. const vm = new Vue({
  51. data: {
  52. a: 1
  53. },
  54. computed: {
  55. b () { return this.a + 1 }
  56. }
  57. })
  58. vm.$watch('b', spy)
  59. vm.a = 2
  60. waitForUpdate(() => {
  61. expect(spy).toHaveBeenCalledWith(3, 2)
  62. }).then(done)
  63. })
  64. it('caching', () => {
  65. const spy = jasmine.createSpy('cached computed')
  66. const vm = new Vue({
  67. data: {
  68. a: 1
  69. },
  70. computed: {
  71. b () {
  72. spy()
  73. return this.a + 1
  74. }
  75. }
  76. })
  77. expect(spy.calls.count()).toBe(0)
  78. vm.b
  79. expect(spy.calls.count()).toBe(1)
  80. vm.b
  81. expect(spy.calls.count()).toBe(1)
  82. })
  83. it('cache: false', () => {
  84. const spy = jasmine.createSpy('cached computed')
  85. const vm = new Vue({
  86. data: {
  87. a: 1
  88. },
  89. computed: {
  90. b: {
  91. cache: false,
  92. get () {
  93. spy()
  94. return this.a + 1
  95. }
  96. }
  97. }
  98. })
  99. expect(spy.calls.count()).toBe(0)
  100. vm.b
  101. expect(spy.calls.count()).toBe(1)
  102. vm.b
  103. expect(spy.calls.count()).toBe(2)
  104. })
  105. })