From 0bb1009ced07bf58776d73992413af2c5cc4665f Mon Sep 17 00:00:00 2001
From: Lukas Eipert <leipert@gitlab.com>
Date: Thu, 19 Jul 2018 16:26:29 +0200
Subject: [PATCH] allow for testAction to wait until all promises are resolved

---
 .../javascripts/helpers/vuex_action_helper.js | 12 ++++-----
 .../helpers/vuex_action_helper_spec.js        | 25 +++++++++++++++++++
 2 files changed, 30 insertions(+), 7 deletions(-)

diff --git a/spec/javascripts/helpers/vuex_action_helper.js b/spec/javascripts/helpers/vuex_action_helper.js
index 4ca7015184ee2..dd9174194a150 100644
--- a/spec/javascripts/helpers/vuex_action_helper.js
+++ b/spec/javascripts/helpers/vuex_action_helper.js
@@ -84,14 +84,12 @@ export default (
     done();
   };
 
-  return new Promise((resolve, reject) => {
-    try {
-      const result = action({ commit, state, dispatch, rootState: state }, payload);
-      resolve(result);
-    } catch (e) {
-      reject(e);
-    }
+  const result = action({ commit, state, dispatch, rootState: state }, payload);
+
+  return new Promise(resolve => {
+    setImmediate(resolve);
   })
+    .then(() => result)
     .catch(error => {
       validateResults();
       throw error;
diff --git a/spec/javascripts/helpers/vuex_action_helper_spec.js b/spec/javascripts/helpers/vuex_action_helper_spec.js
index 8d6ad6750c09b..09f0bd395c354 100644
--- a/spec/javascripts/helpers/vuex_action_helper_spec.js
+++ b/spec/javascripts/helpers/vuex_action_helper_spec.js
@@ -138,4 +138,29 @@ describe('VueX test helper (testAction)', () => {
         });
     });
   });
+
+  it('should work with async actions not returning promises', done => {
+    const data = { FOO: 'BAR' };
+
+    const promiseAction = ({ commit, dispatch }) => {
+      dispatch('ACTION');
+
+      axios
+        .get(TEST_HOST)
+        .then(() => {
+          commit('SUCCESS');
+          return data;
+        })
+        .catch(error => {
+          commit('ERROR');
+          throw error;
+        });
+    };
+
+    mock.onGet(TEST_HOST).replyOnce(200, 42);
+
+    assertion = { mutations: [{ type: 'SUCCESS' }], actions: [{ type: 'ACTION' }] };
+
+    testAction(promiseAction, null, {}, assertion.mutations, assertion.actions, done);
+  });
 });
-- 
GitLab