summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFilipa Lacerda <filipa@gitlab.com>2018-03-29 11:14:18 +0100
committerFilipa Lacerda <filipa@gitlab.com>2018-03-29 11:14:18 +0100
commit470b8ca10ade4af96eb74f908c01d51e227accb3 (patch)
tree58fed065a33e95e8c540e501372d7b3d74355cc7
parente26d20311cf8ef1a20a8973572e781bab76a0a5b (diff)
downloadgitlab-ce-vuex-action-helper-correctly-fail.tar.gz
Add dispatch mock to the test helpervuex-action-helper-correctly-fail
-rw-r--r--spec/javascripts/helpers/vuex_action_helper.js57
-rw-r--r--spec/javascripts/notes/stores/actions_spec.js13
-rw-r--r--spec/javascripts/registry/stores/actions_spec.js4
3 files changed, 62 insertions, 12 deletions
diff --git a/spec/javascripts/helpers/vuex_action_helper.js b/spec/javascripts/helpers/vuex_action_helper.js
index 2b50af36df2..83f29d1b0c2 100644
--- a/spec/javascripts/helpers/vuex_action_helper.js
+++ b/spec/javascripts/helpers/vuex_action_helper.js
@@ -1,15 +1,30 @@
-/* eslint-disable */
-
/**
- * helper for testing action with expected mutations
+ * helper for testing action with expected mutations inspired in
* https://vuex.vuejs.org/en/testing.html
+ *
+ * @example
+ * testAction(
+ * actions.actionName, // action
+ * { }, // mocked response
+ * state, // state
+ * [
+ * { type: types.MUTATION}
+ * { type: types.MUTATION_1, payload: {}}
+ * ], // mutations
+ * [
+ * { type: 'actionName', payload: {}},
+ * { type: 'actionName1', payload: {}}
+ * ] //actions
+ * done,
+ * );
*/
-export default (action, payload, state, expectedMutations, done) => {
- let count = 0;
+export default (action, payload, state, expectedMutations, expectedActions, done) => {
+ let mutationsCount = 0;
+ let actionsCount = 0;
// mock commit
const commit = (type, mutationPayload) => {
- const mutation = expectedMutations[count];
+ const mutation = expectedMutations[mutationsCount];
expect(mutation.type).toEqual(type);
@@ -17,18 +32,40 @@ export default (action, payload, state, expectedMutations, done) => {
expect(mutation.payload).toEqual(mutationPayload);
}
- count++;
- if (count >= expectedMutations.length) {
+ mutationsCount += 1;
+ if (mutationsCount >= expectedMutations.length) {
+ done();
+ }
+ };
+
+ // mock dispatch
+ const dispatch = (type, actionPayload) => {
+ const actionExpected = expectedActions[actionsCount];
+
+ expect(actionExpected.type).toEqual(type);
+
+ if (actionExpected.payload) {
+ expect(actionExpected.payload).toEqual(actionPayload);
+ }
+
+ actionsCount += 1;
+ if (actionsCount >= expectedActions.length) {
done();
}
};
// call the action with mocked store and arguments
- action({ commit, state }, payload);
+ action({ commit, state, dispatch }, payload);
// check if no mutations should have been dispatched
if (expectedMutations.length === 0) {
- expect(count).toEqual(0);
+ expect(mutationsCount).toEqual(0);
+ done();
+ }
+
+ // check if no mutations should have been dispatched
+ if (expectedActions.length === 0) {
+ expect(actionsCount).toEqual(0);
done();
}
};
diff --git a/spec/javascripts/notes/stores/actions_spec.js b/spec/javascripts/notes/stores/actions_spec.js
index 5b77c180fe2..520a25cc5c6 100644
--- a/spec/javascripts/notes/stores/actions_spec.js
+++ b/spec/javascripts/notes/stores/actions_spec.js
@@ -25,6 +25,7 @@ describe('Actions Notes Store', () => {
notesDataMock,
{ notesData: {} },
[{ type: 'SET_NOTES_DATA', payload: notesDataMock }],
+ [],
done,
);
});
@@ -37,6 +38,7 @@ describe('Actions Notes Store', () => {
noteableDataMock,
{ noteableData: {} },
[{ type: 'SET_NOTEABLE_DATA', payload: noteableDataMock }],
+ [],
done,
);
});
@@ -49,6 +51,7 @@ describe('Actions Notes Store', () => {
userDataMock,
{ userData: {} },
[{ type: 'SET_USER_DATA', payload: userDataMock }],
+ [],
done,
);
});
@@ -61,6 +64,7 @@ describe('Actions Notes Store', () => {
'timestamp',
{ lastFetchedAt: {} },
[{ type: 'SET_LAST_FETCHED_AT', payload: 'timestamp' }],
+ [],
done,
);
});
@@ -73,6 +77,7 @@ describe('Actions Notes Store', () => {
[individualNote],
{ notes: [] },
[{ type: 'SET_INITIAL_NOTES', payload: [individualNote] }],
+ [],
done,
);
});
@@ -85,6 +90,7 @@ describe('Actions Notes Store', () => {
'hash',
{ notes: [] },
[{ type: 'SET_TARGET_NOTE_HASH', payload: 'hash' }],
+ [],
done,
);
});
@@ -97,6 +103,7 @@ describe('Actions Notes Store', () => {
{ discussionId: discussionMock.id },
{ notes: [discussionMock] },
[{ type: 'TOGGLE_DISCUSSION', payload: { discussionId: discussionMock.id } }],
+ [],
done,
);
});
@@ -164,6 +171,7 @@ describe('Actions Notes Store', () => {
true,
{},
[{ type: 'TOGGLE_STATE_BUTTON_LOADING', payload: true }],
+ [],
done,
);
});
@@ -174,6 +182,7 @@ describe('Actions Notes Store', () => {
false,
{},
[{ type: 'TOGGLE_STATE_BUTTON_LOADING', payload: false }],
+ [],
done,
);
});
@@ -181,11 +190,11 @@ describe('Actions Notes Store', () => {
describe('toggleIssueLocalState', () => {
it('sets issue state as closed', done => {
- testAction(actions.toggleIssueLocalState, 'closed', {}, [{ type: 'CLOSE_ISSUE' }], done);
+ testAction(actions.toggleIssueLocalState, 'closed', {}, [{ type: 'CLOSE_ISSUE' }], [], done);
});
it('sets issue state as reopened', done => {
- testAction(actions.toggleIssueLocalState, 'reopened', {}, [{ type: 'REOPEN_ISSUE' }], done);
+ testAction(actions.toggleIssueLocalState, 'reopened', {}, [{ type: 'REOPEN_ISSUE' }], [], done);
});
});
diff --git a/spec/javascripts/registry/stores/actions_spec.js b/spec/javascripts/registry/stores/actions_spec.js
index 19144ae0c0f..bc4c444655a 100644
--- a/spec/javascripts/registry/stores/actions_spec.js
+++ b/spec/javascripts/registry/stores/actions_spec.js
@@ -49,6 +49,7 @@ describe('Actions Registry Store', () => {
{ type: types.TOGGLE_MAIN_LOADING },
{ type: types.SET_REPOS_LIST, payload: reposServerResponse },
],
+ [],
done,
);
});
@@ -88,6 +89,7 @@ describe('Actions Registry Store', () => {
},
},
],
+ [],
done,
);
});
@@ -101,6 +103,7 @@ describe('Actions Registry Store', () => {
'endpoint',
mockedState,
[{ type: types.SET_MAIN_ENDPOINT, payload: 'endpoint' }],
+ [],
done,
);
});
@@ -113,6 +116,7 @@ describe('Actions Registry Store', () => {
null,
mockedState,
[{ type: types.TOGGLE_MAIN_LOADING }],
+ [],
done,
);
});