helpers.spec.js 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298
  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('mapState (with namespace)', () => {
  40. const store = new Vuex.Store({
  41. modules: {
  42. foo: {
  43. namespaced: true,
  44. state: { a: 1 },
  45. getters: {
  46. b: state => state.a + 1
  47. }
  48. }
  49. }
  50. })
  51. const vm = new Vue({
  52. store,
  53. computed: mapState('foo', {
  54. a: (state, getters) => {
  55. return state.a + getters.b
  56. }
  57. })
  58. })
  59. expect(vm.a).toBe(3)
  60. store.state.foo.a++
  61. expect(vm.a).toBe(5)
  62. store.replaceState({
  63. foo: { a: 3 }
  64. })
  65. expect(vm.a).toBe(7)
  66. })
  67. it('mapMutations (array)', () => {
  68. const store = new Vuex.Store({
  69. state: { count: 0 },
  70. mutations: {
  71. inc: state => state.count++,
  72. dec: state => state.count--
  73. }
  74. })
  75. const vm = new Vue({
  76. store,
  77. methods: mapMutations(['inc', 'dec'])
  78. })
  79. vm.inc()
  80. expect(store.state.count).toBe(1)
  81. vm.dec()
  82. expect(store.state.count).toBe(0)
  83. })
  84. it('mapMutations (object)', () => {
  85. const store = new Vuex.Store({
  86. state: { count: 0 },
  87. mutations: {
  88. inc: state => state.count++,
  89. dec: state => state.count--
  90. }
  91. })
  92. const vm = new Vue({
  93. store,
  94. methods: mapMutations({
  95. plus: 'inc',
  96. minus: 'dec'
  97. })
  98. })
  99. vm.plus()
  100. expect(store.state.count).toBe(1)
  101. vm.minus()
  102. expect(store.state.count).toBe(0)
  103. })
  104. it('mapMutations (with namespace)', () => {
  105. const store = new Vuex.Store({
  106. modules: {
  107. foo: {
  108. namespaced: true,
  109. state: { count: 0 },
  110. mutations: {
  111. inc: state => state.count++,
  112. dec: state => state.count--
  113. }
  114. }
  115. }
  116. })
  117. const vm = new Vue({
  118. store,
  119. methods: mapMutations('foo', {
  120. plus: 'inc',
  121. minus: 'dec'
  122. })
  123. })
  124. vm.plus()
  125. expect(store.state.foo.count).toBe(1)
  126. vm.minus()
  127. expect(store.state.foo.count).toBe(0)
  128. })
  129. it('mapGetters (array)', () => {
  130. const store = new Vuex.Store({
  131. state: { count: 0 },
  132. mutations: {
  133. inc: state => state.count++,
  134. dec: state => state.count--
  135. },
  136. getters: {
  137. hasAny: ({ count }) => count > 0,
  138. negative: ({ count }) => count < 0
  139. }
  140. })
  141. const vm = new Vue({
  142. store,
  143. computed: mapGetters(['hasAny', 'negative'])
  144. })
  145. expect(vm.hasAny).toBe(false)
  146. expect(vm.negative).toBe(false)
  147. store.commit('inc')
  148. expect(vm.hasAny).toBe(true)
  149. expect(vm.negative).toBe(false)
  150. store.commit('dec')
  151. store.commit('dec')
  152. expect(vm.hasAny).toBe(false)
  153. expect(vm.negative).toBe(true)
  154. })
  155. it('mapGetters (object)', () => {
  156. const store = new Vuex.Store({
  157. state: { count: 0 },
  158. mutations: {
  159. inc: state => state.count++,
  160. dec: state => state.count--
  161. },
  162. getters: {
  163. hasAny: ({ count }) => count > 0,
  164. negative: ({ count }) => count < 0
  165. }
  166. })
  167. const vm = new Vue({
  168. store,
  169. computed: mapGetters({
  170. a: 'hasAny',
  171. b: 'negative'
  172. })
  173. })
  174. expect(vm.a).toBe(false)
  175. expect(vm.b).toBe(false)
  176. store.commit('inc')
  177. expect(vm.a).toBe(true)
  178. expect(vm.b).toBe(false)
  179. store.commit('dec')
  180. store.commit('dec')
  181. expect(vm.a).toBe(false)
  182. expect(vm.b).toBe(true)
  183. })
  184. it('mapGetters (with namespace)', () => {
  185. const store = new Vuex.Store({
  186. modules: {
  187. foo: {
  188. namespaced: true,
  189. state: { count: 0 },
  190. mutations: {
  191. inc: state => state.count++,
  192. dec: state => state.count--
  193. },
  194. getters: {
  195. hasAny: ({ count }) => count > 0,
  196. negative: ({ count }) => count < 0
  197. }
  198. }
  199. }
  200. })
  201. const vm = new Vue({
  202. store,
  203. computed: mapGetters('foo', {
  204. a: 'hasAny',
  205. b: 'negative'
  206. })
  207. })
  208. expect(vm.a).toBe(false)
  209. expect(vm.b).toBe(false)
  210. store.commit('foo/inc')
  211. expect(vm.a).toBe(true)
  212. expect(vm.b).toBe(false)
  213. store.commit('foo/dec')
  214. store.commit('foo/dec')
  215. expect(vm.a).toBe(false)
  216. expect(vm.b).toBe(true)
  217. })
  218. it('mapActions (array)', () => {
  219. const a = jasmine.createSpy()
  220. const b = jasmine.createSpy()
  221. const store = new Vuex.Store({
  222. actions: {
  223. a,
  224. b
  225. }
  226. })
  227. const vm = new Vue({
  228. store,
  229. methods: mapActions(['a', 'b'])
  230. })
  231. vm.a()
  232. expect(a).toHaveBeenCalled()
  233. expect(b).not.toHaveBeenCalled()
  234. vm.b()
  235. expect(b).toHaveBeenCalled()
  236. })
  237. it('mapActions (object)', () => {
  238. const a = jasmine.createSpy()
  239. const b = jasmine.createSpy()
  240. const store = new Vuex.Store({
  241. actions: {
  242. a,
  243. b
  244. }
  245. })
  246. const vm = new Vue({
  247. store,
  248. methods: mapActions({
  249. foo: 'a',
  250. bar: 'b'
  251. })
  252. })
  253. vm.foo()
  254. expect(a).toHaveBeenCalled()
  255. expect(b).not.toHaveBeenCalled()
  256. vm.bar()
  257. expect(b).toHaveBeenCalled()
  258. })
  259. it('mapActions (with namespace)', () => {
  260. const a = jasmine.createSpy()
  261. const b = jasmine.createSpy()
  262. const store = new Vuex.Store({
  263. modules: {
  264. foo: {
  265. namespaced: true,
  266. actions: {
  267. a,
  268. b
  269. }
  270. }
  271. }
  272. })
  273. const vm = new Vue({
  274. store,
  275. methods: mapActions('foo/', {
  276. foo: 'a',
  277. bar: 'b'
  278. })
  279. })
  280. vm.foo()
  281. expect(a).toHaveBeenCalled()
  282. expect(b).not.toHaveBeenCalled()
  283. vm.bar()
  284. expect(b).toHaveBeenCalled()
  285. })
  286. })