helpers.spec.js 6.2 KB

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