Bläddra i källkod

Expose getters into actions (#245)

* expose getters into actions (Fix #244)

* improve getters test for hot reload
katashin 8 år sedan
förälder
incheckning
b2f2514e12
2 ändrade filer med 35 tillägg och 4 borttagningar
  1. 1 0
      src/index.js
  2. 34 4
      test/unit/test.js

+ 1 - 0
src/index.js

@@ -119,6 +119,7 @@ class Store {
       let res = handler({
       let res = handler({
         dispatch,
         dispatch,
         commit,
         commit,
+        getters: store.getters,
         state: getNestedState(store.state, path)
         state: getNestedState(store.state, path)
       }, payload, cb)
       }, payload, cb)
       if (!isPromise(res)) {
       if (!isPromise(res)) {

+ 34 - 4
test/unit/test.js

@@ -184,11 +184,21 @@ describe('Vuex', () => {
         [TEST] (state, n) {
         [TEST] (state, n) {
           state.a += n
           state.a += n
         }
         }
+      },
+      actions: {
+        check ({ getters }, value) {
+          // check for exposing getters into actions
+          expect(getters.hasAny).to.equal(value)
+        }
       }
       }
     })
     })
     expect(store.getters.hasAny).to.equal(false)
     expect(store.getters.hasAny).to.equal(false)
+    store.dispatch('check', false)
+
     store.commit(TEST, 1)
     store.commit(TEST, 1)
+
     expect(store.getters.hasAny).to.equal(true)
     expect(store.getters.hasAny).to.equal(true)
+    store.dispatch('check', true)
   })
   })
 
 
   it('dynamic module registration', () => {
   it('dynamic module registration', () => {
@@ -799,23 +809,43 @@ describe('Vuex', () => {
         inc: state => state.count++
         inc: state => state.count++
       },
       },
       getters: {
       getters: {
-        hasAny: state => state.count > 0
+        count: state => state.count
+      },
+      actions: {
+        check ({ getters }, value) {
+          expect(getters.count).to.equal(value)
+        }
       }
       }
     })
     })
 
 
     const spy = sinon.spy()
     const spy = sinon.spy()
     const vm = new Vue({
     const vm = new Vue({
       computed: {
       computed: {
-        a: () => store.getters.hasAny
+        a: () => store.getters.count
       },
       },
       watch: {
       watch: {
         a: spy
         a: spy
       }
       }
     })
     })
 
 
-    expect(vm.a).to.equal(false)
+    expect(vm.a).to.equal(0)
+    store.dispatch('check', 0)
+
     store.commit('inc')
     store.commit('inc')
-    expect(vm.a).to.equal(true)
+
+    expect(vm.a).to.equal(1)
+    store.dispatch('check', 1)
+
+    // update getters
+    store.hotUpdate({
+      getters: {
+        count: state => state.count * 10
+      }
+    })
+
+    expect(vm.a).to.equal(10)
+    store.dispatch('check', 10)
+
     Vue.nextTick(() => {
     Vue.nextTick(() => {
       expect(spy).to.have.been.called
       expect(spy).to.have.been.called
       done()
       done()