helpers.spec.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. import Vue from 'vue/dist/vue.common.js'
  2. import Vuex, { mapState, mapMutations, mapGetters, mapActions } from '../../dist/vuex.js'
  3. describe('Helpers', () => {
  4. it('mapState (array)', () => {
  5. const store = new Vuex.Store({
  6. state: {
  7. a: 1
  8. }
  9. })
  10. const vm = new Vue({
  11. store,
  12. computed: mapState(['a'])
  13. })
  14. expect(vm.a).toBe(1)
  15. store.state.a++
  16. expect(vm.a).toBe(2)
  17. })
  18. it('mapState (object)', () => {
  19. const store = new Vuex.Store({
  20. state: {
  21. a: 1
  22. },
  23. getters: {
  24. b: () => 2
  25. }
  26. })
  27. const vm = new Vue({
  28. store,
  29. computed: mapState({
  30. a: (state, getters) => {
  31. return state.a + getters.b
  32. }
  33. })
  34. })
  35. expect(vm.a).toBe(3)
  36. store.state.a++
  37. expect(vm.a).toBe(4)
  38. })
  39. it('mapMutations (array)', () => {
  40. const store = new Vuex.Store({
  41. state: { count: 0 },
  42. mutations: {
  43. inc: state => state.count++,
  44. dec: state => state.count--
  45. }
  46. })
  47. const vm = new Vue({
  48. store,
  49. methods: mapMutations(['inc', 'dec'])
  50. })
  51. vm.inc()
  52. expect(store.state.count).toBe(1)
  53. vm.dec()
  54. expect(store.state.count).toBe(0)
  55. })
  56. it('mapMutations (object)', () => {
  57. const store = new Vuex.Store({
  58. state: { count: 0 },
  59. mutations: {
  60. inc: state => state.count++,
  61. dec: state => state.count--
  62. }
  63. })
  64. const vm = new Vue({
  65. store,
  66. methods: mapMutations({
  67. plus: 'inc',
  68. minus: 'dec'
  69. })
  70. })
  71. vm.plus()
  72. expect(store.state.count).toBe(1)
  73. vm.minus()
  74. expect(store.state.count).toBe(0)
  75. })
  76. it('mapGetters (array)', () => {
  77. const store = new Vuex.Store({
  78. state: { count: 0 },
  79. mutations: {
  80. inc: state => state.count++,
  81. dec: state => state.count--
  82. },
  83. getters: {
  84. hasAny: ({ count }) => count > 0,
  85. negative: ({ count }) => count < 0
  86. }
  87. })
  88. const vm = new Vue({
  89. store,
  90. computed: mapGetters(['hasAny', 'negative'])
  91. })
  92. expect(vm.hasAny).toBe(false)
  93. expect(vm.negative).toBe(false)
  94. store.commit('inc')
  95. expect(vm.hasAny).toBe(true)
  96. expect(vm.negative).toBe(false)
  97. store.commit('dec')
  98. store.commit('dec')
  99. expect(vm.hasAny).toBe(false)
  100. expect(vm.negative).toBe(true)
  101. })
  102. it('mapGetters (object)', () => {
  103. const store = new Vuex.Store({
  104. state: { count: 0 },
  105. mutations: {
  106. inc: state => state.count++,
  107. dec: state => state.count--
  108. },
  109. getters: {
  110. hasAny: ({ count }) => count > 0,
  111. negative: ({ count }) => count < 0
  112. }
  113. })
  114. const vm = new Vue({
  115. store,
  116. computed: mapGetters({
  117. a: 'hasAny',
  118. b: 'negative'
  119. })
  120. })
  121. expect(vm.a).toBe(false)
  122. expect(vm.b).toBe(false)
  123. store.commit('inc')
  124. expect(vm.a).toBe(true)
  125. expect(vm.b).toBe(false)
  126. store.commit('dec')
  127. store.commit('dec')
  128. expect(vm.a).toBe(false)
  129. expect(vm.b).toBe(true)
  130. })
  131. it('mapActions (array)', () => {
  132. const a = jasmine.createSpy()
  133. const b = jasmine.createSpy()
  134. const store = new Vuex.Store({
  135. actions: {
  136. a,
  137. b
  138. }
  139. })
  140. const vm = new Vue({
  141. store,
  142. methods: mapActions(['a', 'b'])
  143. })
  144. vm.a()
  145. expect(a).toHaveBeenCalled()
  146. expect(b).not.toHaveBeenCalled()
  147. vm.b()
  148. expect(b).toHaveBeenCalled()
  149. })
  150. it('mapActions (object)', () => {
  151. const a = jasmine.createSpy()
  152. const b = jasmine.createSpy()
  153. const store = new Vuex.Store({
  154. actions: {
  155. a,
  156. b
  157. }
  158. })
  159. const vm = new Vue({
  160. store,
  161. methods: mapActions({
  162. foo: 'a',
  163. bar: 'b'
  164. })
  165. })
  166. vm.foo()
  167. expect(a).toHaveBeenCalled()
  168. expect(b).not.toHaveBeenCalled()
  169. vm.bar()
  170. expect(b).toHaveBeenCalled()
  171. })
  172. })