Commit 8a713b37 authored by Mike Greiling's avatar Mike Greiling

add spyOnDependency method

parent 8166a11c
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
"sandbox": false, "sandbox": false,
"setFixtures": false, "setFixtures": false,
"setStyleFixtures": false, "setStyleFixtures": false,
"spyOnDependency": false,
"spyOnEvent": false, "spyOnEvent": false,
"ClassSpecHelper": false "ClassSpecHelper": false
}, },
......
...@@ -2,7 +2,6 @@ import Vue from 'vue'; ...@@ -2,7 +2,6 @@ import Vue from 'vue';
import axios from '~/lib/utils/axios_utils'; import axios from '~/lib/utils/axios_utils';
import stopJobsModal from '~/pages/admin/jobs/index/components/stop_jobs_modal.vue'; import stopJobsModal from '~/pages/admin/jobs/index/components/stop_jobs_modal.vue';
import * as urlUtility from '~/lib/utils/url_utility';
import mountComponent from 'spec/helpers/vue_mount_component_helper'; import mountComponent from 'spec/helpers/vue_mount_component_helper';
...@@ -24,7 +23,7 @@ describe('stop_jobs_modal.vue', () => { ...@@ -24,7 +23,7 @@ describe('stop_jobs_modal.vue', () => {
describe('onSubmit', () => { describe('onSubmit', () => {
it('stops jobs and redirects to overview page', (done) => { it('stops jobs and redirects to overview page', (done) => {
const responseURL = `${gl.TEST_HOST}/stop_jobs_modal.vue/jobs`; const responseURL = `${gl.TEST_HOST}/stop_jobs_modal.vue/jobs`;
const redirectSpy = spyOn(urlUtility, 'redirectTo'); const redirectSpy = spyOnDependency(stopJobsModal, 'redirectTo');
spyOn(axios, 'post').and.callFake((url) => { spyOn(axios, 'post').and.callFake((url) => {
expect(url).toBe(props.url); expect(url).toBe(props.url);
return Promise.resolve({ return Promise.resolve({
...@@ -44,7 +43,7 @@ describe('stop_jobs_modal.vue', () => { ...@@ -44,7 +43,7 @@ describe('stop_jobs_modal.vue', () => {
it('displays error if stopping jobs failed', (done) => { it('displays error if stopping jobs failed', (done) => {
const dummyError = new Error('stopping jobs failed'); const dummyError = new Error('stopping jobs failed');
const redirectSpy = spyOn(urlUtility, 'redirectTo'); const redirectSpy = spyOnDependency(stopJobsModal, 'redirectTo');
spyOn(axios, 'post').and.callFake((url) => { spyOn(axios, 'post').and.callFake((url) => {
expect(url).toBe(props.url); expect(url).toBe(props.url);
return Promise.reject(dummyError); return Promise.reject(dummyError);
......
...@@ -3,7 +3,6 @@ import Vue from 'vue'; ...@@ -3,7 +3,6 @@ import Vue from 'vue';
import axios from '~/lib/utils/axios_utils'; import axios from '~/lib/utils/axios_utils';
import deleteMilestoneModal from '~/pages/milestones/shared/components/delete_milestone_modal.vue'; import deleteMilestoneModal from '~/pages/milestones/shared/components/delete_milestone_modal.vue';
import eventHub from '~/pages/milestones/shared/event_hub'; import eventHub from '~/pages/milestones/shared/event_hub';
import * as urlUtility from '~/lib/utils/url_utility';
import mountComponent from 'spec/helpers/vue_mount_component_helper'; import mountComponent from 'spec/helpers/vue_mount_component_helper';
...@@ -40,7 +39,7 @@ describe('delete_milestone_modal.vue', () => { ...@@ -40,7 +39,7 @@ describe('delete_milestone_modal.vue', () => {
}, },
}); });
}); });
const redirectSpy = spyOn(urlUtility, 'redirectTo'); const redirectSpy = spyOnDependency(deleteMilestoneModal, 'redirectTo');
vm.onSubmit() vm.onSubmit()
.then(() => { .then(() => {
...@@ -60,7 +59,7 @@ describe('delete_milestone_modal.vue', () => { ...@@ -60,7 +59,7 @@ describe('delete_milestone_modal.vue', () => {
eventHub.$emit.calls.reset(); eventHub.$emit.calls.reset();
return Promise.reject(dummyError); return Promise.reject(dummyError);
}); });
const redirectSpy = spyOn(urlUtility, 'redirectTo'); const redirectSpy = spyOnDependency(deleteMilestoneModal, 'redirectTo');
vm.onSubmit() vm.onSubmit()
.catch((error) => { .catch((error) => {
......
/* eslint-disable jasmine/no-global-setup */ /* eslint-disable jasmine/no-global-setup, jasmine/no-unsafe-spy, no-underscore-dangle */
import $ from 'jquery'; import $ from 'jquery';
import 'vendor/jasmine-jquery'; import 'vendor/jasmine-jquery';
import '~/commons'; import '~/commons';
...@@ -55,6 +56,17 @@ window.addEventListener('unhandledrejection', event => { ...@@ -55,6 +56,17 @@ window.addEventListener('unhandledrejection', event => {
console.error(event.reason.stack || event.reason); console.error(event.reason.stack || event.reason);
}); });
// Add global function to spy on a module's dependencies via rewire
window.spyOnDependency = (module, name) => {
const dependency = module.__GetDependency__(name);
const spy = jasmine.createSpy(name, dependency);
module.__Rewire__(name, spy);
return spy;
};
// Reset any rewired modules after each test (see babel-plugin-rewire)
afterEach(__rewire_reset_all__); // eslint-disable-line
// HACK: Chrome 59 disconnects if there are too many synchronous tests in a row // HACK: Chrome 59 disconnects if there are too many synchronous tests in a row
// because it appears to lock up the thread that communicates to Karma's socket // because it appears to lock up the thread that communicates to Karma's socket
// This async beforeEach gets called on every spec and releases the JS thread long // This async beforeEach gets called on every spec and releases the JS thread long
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment