From d3257e2cbc047de5da69cabd210d2b885092f5d2 Mon Sep 17 00:00:00 2001 From: Winnie Hellmann Date: Mon, 8 Apr 2019 19:51:24 +0000 Subject: Enable ESLint rule jest/no-focused-tests --- spec/frontend/.eslintrc.yml | 2 ++ spec/frontend/serverless/components/functions_spec.js | 14 +++++++++----- 2 files changed, 11 insertions(+), 5 deletions(-) (limited to 'spec/frontend') diff --git a/spec/frontend/.eslintrc.yml b/spec/frontend/.eslintrc.yml index 054dc27cda6..30b559c2363 100644 --- a/spec/frontend/.eslintrc.yml +++ b/spec/frontend/.eslintrc.yml @@ -12,3 +12,5 @@ globals: loadFixtures: false preloadFixtures: false setFixtures: false +rules: + jest/no-focused-tests: error diff --git a/spec/frontend/serverless/components/functions_spec.js b/spec/frontend/serverless/components/functions_spec.js index 5533de1a70a..7af33ceaadc 100644 --- a/spec/frontend/serverless/components/functions_spec.js +++ b/spec/frontend/serverless/components/functions_spec.js @@ -4,14 +4,21 @@ import axios from '~/lib/utils/axios_utils'; import functionsComponent from '~/serverless/components/functions.vue'; import { createLocalVue, shallowMount } from '@vue/test-utils'; import { createStore } from '~/serverless/store'; +import { TEST_HOST } from 'helpers/test_constants'; import { mockServerlessFunctions } from '../mock_data'; describe('functionsComponent', () => { + const statusPath = `${TEST_HOST}/statusPath`; + let component; let store; let localVue; + let axiosMock; beforeEach(() => { + axiosMock = new AxiosMockAdapter(axios); + axiosMock.onGet(statusPath).reply(200); + localVue = createLocalVue(); localVue.use(Vuex); @@ -20,6 +27,7 @@ describe('functionsComponent', () => { afterEach(() => { component.vm.$destroy(); + axiosMock.restore(); }); it('should render empty state when Knative is not installed', () => { @@ -80,11 +88,7 @@ describe('functionsComponent', () => { ); }); - fit('should render the functions list', () => { - const statusPath = 'statusPath'; - const axiosMock = new AxiosMockAdapter(axios); - axiosMock.onGet(statusPath).reply(200); - + it('should render the functions list', () => { component = shallowMount(functionsComponent, { localVue, store, -- cgit v1.2.1 From 61d08f575c0ecc0be00ff2db5509c38ae67bb65c Mon Sep 17 00:00:00 2001 From: Winnie Hellmann Date: Mon, 8 Apr 2019 19:34:39 +0200 Subject: Enable ESLint rule jest/no-identical-title --- spec/frontend/.eslintrc.yml | 1 + 1 file changed, 1 insertion(+) (limited to 'spec/frontend') diff --git a/spec/frontend/.eslintrc.yml b/spec/frontend/.eslintrc.yml index 30b559c2363..b4bba8df833 100644 --- a/spec/frontend/.eslintrc.yml +++ b/spec/frontend/.eslintrc.yml @@ -13,4 +13,5 @@ globals: preloadFixtures: false setFixtures: false rules: + jest/no-identical-title: error jest/no-focused-tests: error -- cgit v1.2.1 From f23737a498e41a9ef2ae84fa45dbbdaaf524a174 Mon Sep 17 00:00:00 2001 From: Winnie Hellmann Date: Mon, 8 Apr 2019 19:54:15 +0200 Subject: Refactor diff_spec.js to use table-based tests --- spec/frontend/ide/lib/diff/diff_spec.js | 93 ++++++++++++++++----------------- 1 file changed, 45 insertions(+), 48 deletions(-) (limited to 'spec/frontend') diff --git a/spec/frontend/ide/lib/diff/diff_spec.js b/spec/frontend/ide/lib/diff/diff_spec.js index 57f3ac3d365..d9b088e2c12 100644 --- a/spec/frontend/ide/lib/diff/diff_spec.js +++ b/spec/frontend/ide/lib/diff/diff_spec.js @@ -9,60 +9,57 @@ describe('Multi-file editor library diff calculator', () => { }); describe('modified', () => { - it('', () => { - const diff = computeDiff('123', '1234')[0]; - - expect(diff.added).toBeTruthy(); - expect(diff.modified).toBeTruthy(); - expect(diff.removed).toBeUndefined(); - }); - - it('', () => { - const diff = computeDiff('123\n123\n123', '123\n1234\n123')[0]; - - expect(diff.added).toBeTruthy(); - expect(diff.modified).toBeTruthy(); - expect(diff.removed).toBeUndefined(); - expect(diff.lineNumber).toBe(2); - }); + it.each` + originalContent | newContent | lineNumber + ${'123'} | ${'1234'} | ${1} + ${'123\n123\n123'} | ${'123\n1234\n123'} | ${2} + `( + 'marks line $lineNumber as added and modified but not removed', + ({ originalContent, newContent, lineNumber }) => { + const diff = computeDiff(originalContent, newContent)[0]; + + expect(diff.added).toBeTruthy(); + expect(diff.modified).toBeTruthy(); + expect(diff.removed).toBeUndefined(); + expect(diff.lineNumber).toBe(lineNumber); + }, + ); }); describe('added', () => { - it('', () => { - const diff = computeDiff('123', '123\n123')[0]; - - expect(diff.added).toBeTruthy(); - expect(diff.modified).toBeUndefined(); - expect(diff.removed).toBeUndefined(); - }); - - it('', () => { - const diff = computeDiff('123\n123\n123', '123\n123\n1234\n123')[0]; - - expect(diff.added).toBeTruthy(); - expect(diff.modified).toBeUndefined(); - expect(diff.removed).toBeUndefined(); - expect(diff.lineNumber).toBe(3); - }); + it.each` + originalContent | newContent | lineNumber + ${'123'} | ${'123\n123'} | ${1} + ${'123\n123\n123'} | ${'123\n123\n1234\n123'} | ${3} + `( + 'marks line $lineNumber as added but not modified and not removed', + ({ originalContent, newContent, lineNumber }) => { + const diff = computeDiff(originalContent, newContent)[0]; + + expect(diff.added).toBeTruthy(); + expect(diff.modified).toBeUndefined(); + expect(diff.removed).toBeUndefined(); + expect(diff.lineNumber).toBe(lineNumber); + }, + ); }); describe('removed', () => { - it('', () => { - const diff = computeDiff('123', '')[0]; - - expect(diff.added).toBeUndefined(); - expect(diff.modified).toBeUndefined(); - expect(diff.removed).toBeTruthy(); - }); - - it('', () => { - const diff = computeDiff('123\n123\n123', '123\n123')[0]; - - expect(diff.added).toBeUndefined(); - expect(diff.modified).toBeTruthy(); - expect(diff.removed).toBeTruthy(); - expect(diff.lineNumber).toBe(2); - }); + it.each` + originalContent | newContent | lineNumber | modified + ${'123'} | ${''} | ${1} | ${undefined} + ${'123\n123\n123'} | ${'123\n123'} | ${2} | ${true} + `( + 'marks line $lineNumber as removed', + ({ originalContent, newContent, lineNumber, modified }) => { + const diff = computeDiff(originalContent, newContent)[0]; + + expect(diff.added).toBeUndefined(); + expect(diff.modified).toBe(modified); + expect(diff.removed).toBeTruthy(); + expect(diff.lineNumber).toBe(lineNumber); + }, + ); }); it('includes line number of change', () => { -- cgit v1.2.1 From b28ba16a1eeb3f6437f282eafc15ea963c82bdf3 Mon Sep 17 00:00:00 2001 From: Winnie Hellmann Date: Mon, 8 Apr 2019 19:19:54 +0200 Subject: Enable ESLint rule jest/no-jasmine-globals --- spec/frontend/.eslintrc.yml | 1 + 1 file changed, 1 insertion(+) (limited to 'spec/frontend') diff --git a/spec/frontend/.eslintrc.yml b/spec/frontend/.eslintrc.yml index 30b559c2363..63004b96ad6 100644 --- a/spec/frontend/.eslintrc.yml +++ b/spec/frontend/.eslintrc.yml @@ -14,3 +14,4 @@ globals: setFixtures: false rules: jest/no-focused-tests: error + jest/no-jasmine-globals: error -- cgit v1.2.1 From cb892da622820505637bafc39c0c0688300a6dc7 Mon Sep 17 00:00:00 2001 From: Winnie Hellmann Date: Mon, 8 Apr 2019 19:20:40 +0200 Subject: Run yarn eslint --fix --- .../services/recent_searches_service_error_spec.js | 2 +- spec/frontend/ide/lib/editor_options_spec.js | 2 +- .../frontend/pages/admin/abuse_reports/abuse_reports_spec.js | 4 ++-- spec/frontend/pages/profiles/show/emoji_menu_spec.js | 12 ++++++------ 4 files changed, 10 insertions(+), 10 deletions(-) (limited to 'spec/frontend') diff --git a/spec/frontend/filtered_search/services/recent_searches_service_error_spec.js b/spec/frontend/filtered_search/services/recent_searches_service_error_spec.js index ea7c146fa4f..0e62bc94517 100644 --- a/spec/frontend/filtered_search/services/recent_searches_service_error_spec.js +++ b/spec/frontend/filtered_search/services/recent_searches_service_error_spec.js @@ -8,7 +8,7 @@ describe('RecentSearchesServiceError', () => { }); it('instantiates an instance of RecentSearchesServiceError and not an Error', () => { - expect(recentSearchesServiceError).toEqual(jasmine.any(RecentSearchesServiceError)); + expect(recentSearchesServiceError).toEqual(expect.any(RecentSearchesServiceError)); expect(recentSearchesServiceError.name).toBe('RecentSearchesServiceError'); }); diff --git a/spec/frontend/ide/lib/editor_options_spec.js b/spec/frontend/ide/lib/editor_options_spec.js index d149a883166..b07a583b7c8 100644 --- a/spec/frontend/ide/lib/editor_options_spec.js +++ b/spec/frontend/ide/lib/editor_options_spec.js @@ -2,7 +2,7 @@ import editorOptions from '~/ide/lib/editor_options'; describe('Multi-file editor library editor options', () => { it('returns an array', () => { - expect(editorOptions).toEqual(jasmine.any(Array)); + expect(editorOptions).toEqual(expect.any(Array)); }); it('contains readOnly option', () => { diff --git a/spec/frontend/pages/admin/abuse_reports/abuse_reports_spec.js b/spec/frontend/pages/admin/abuse_reports/abuse_reports_spec.js index 1e0bc708c31..7e9aec84016 100644 --- a/spec/frontend/pages/admin/abuse_reports/abuse_reports_spec.js +++ b/spec/frontend/pages/admin/abuse_reports/abuse_reports_spec.js @@ -25,14 +25,14 @@ describe('Abuse Reports', () => { it('should truncate long messages', () => { const $longMessage = findMessage('LONG MESSAGE'); - expect($longMessage.data('originalMessage')).toEqual(jasmine.anything()); + expect($longMessage.data('originalMessage')).toEqual(expect.anything()); assertMaxLength($longMessage); }); it('should not truncate short messages', () => { const $shortMessage = findMessage('SHORT MESSAGE'); - expect($shortMessage.data('originalMessage')).not.toEqual(jasmine.anything()); + expect($shortMessage.data('originalMessage')).not.toEqual(expect.anything()); }); it('should allow clicking a truncated message to expand and collapse the full message', () => { diff --git a/spec/frontend/pages/profiles/show/emoji_menu_spec.js b/spec/frontend/pages/profiles/show/emoji_menu_spec.js index efc338b36eb..b8020a2035e 100644 --- a/spec/frontend/pages/profiles/show/emoji_menu_spec.js +++ b/spec/frontend/pages/profiles/show/emoji_menu_spec.js @@ -75,19 +75,19 @@ describe('EmojiMenu', () => { expect(emojiMenu.registerEventListener).toHaveBeenCalledWith( 'one', - jasmine.anything(), + expect.anything(), 'mouseenter focus', dummyToggleButtonSelector, 'mouseenter focus', - jasmine.anything(), + expect.anything(), ); expect(emojiMenu.registerEventListener).toHaveBeenCalledWith( 'on', - jasmine.anything(), + expect.anything(), 'click', dummyToggleButtonSelector, - jasmine.anything(), + expect.anything(), ); }); @@ -96,10 +96,10 @@ describe('EmojiMenu', () => { expect(emojiMenu.registerEventListener).toHaveBeenCalledWith( 'on', - jasmine.anything(), + expect.anything(), 'click', `.js-awards-block .js-emoji-btn, .${dummyMenuClass} .js-emoji-btn`, - jasmine.anything(), + expect.anything(), ); }); }); -- cgit v1.2.1 From e658b33792707a3dc190355ddc3d6c8d3ddb0cd8 Mon Sep 17 00:00:00 2001 From: Winnie Hellmann Date: Mon, 8 Apr 2019 19:24:00 +0200 Subject: Replace jasmine.createSpy() with jest.fn() --- spec/frontend/error_tracking/components/error_tracking_list_spec.js | 2 +- spec/frontend/ide/lib/common/disposable_spec.js | 2 +- spec/frontend/pages/profiles/show/emoji_menu_spec.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) (limited to 'spec/frontend') diff --git a/spec/frontend/error_tracking/components/error_tracking_list_spec.js b/spec/frontend/error_tracking/components/error_tracking_list_spec.js index 503af3920a8..67e5dc399ac 100644 --- a/spec/frontend/error_tracking/components/error_tracking_list_spec.js +++ b/spec/frontend/error_tracking/components/error_tracking_list_spec.js @@ -31,7 +31,7 @@ describe('ErrorTrackingList', () => { actions = { getErrorList: () => {}, startPolling: () => {}, - restartPolling: jasmine.createSpy('restartPolling'), + restartPolling: jest.fn().mockName('restartPolling'), }; const state = { diff --git a/spec/frontend/ide/lib/common/disposable_spec.js b/spec/frontend/ide/lib/common/disposable_spec.js index af12ca15369..8596642eb7a 100644 --- a/spec/frontend/ide/lib/common/disposable_spec.js +++ b/spec/frontend/ide/lib/common/disposable_spec.js @@ -8,7 +8,7 @@ describe('Multi-file editor library disposable class', () => { instance = new Disposable(); disposableClass = { - dispose: jasmine.createSpy('dispose'), + dispose: jest.fn().mockName('dispose'), }; }); diff --git a/spec/frontend/pages/profiles/show/emoji_menu_spec.js b/spec/frontend/pages/profiles/show/emoji_menu_spec.js index b8020a2035e..6ac1e83829f 100644 --- a/spec/frontend/pages/profiles/show/emoji_menu_spec.js +++ b/spec/frontend/pages/profiles/show/emoji_menu_spec.js @@ -13,7 +13,7 @@ describe('EmojiMenu', () => { let dummyEmojiList; beforeEach(() => { - dummySelectEmojiCallback = jasmine.createSpy('dummySelectEmojiCallback'); + dummySelectEmojiCallback = jest.fn().mockName('dummySelectEmojiCallback'); dummyEmojiList = { glEmojiTag() { return dummyEmojiTag; -- cgit v1.2.1 From c2c8189b10037bdc3e9e31fa73242d169e1ca46b Mon Sep 17 00:00:00 2001 From: Winnie Hellmann Date: Mon, 8 Apr 2019 20:04:49 +0200 Subject: Enable ESLint rule jest/valid-describe --- spec/frontend/.eslintrc.yml | 1 + 1 file changed, 1 insertion(+) (limited to 'spec/frontend') diff --git a/spec/frontend/.eslintrc.yml b/spec/frontend/.eslintrc.yml index 0e6ca11c1f8..ff18f0e4a2d 100644 --- a/spec/frontend/.eslintrc.yml +++ b/spec/frontend/.eslintrc.yml @@ -15,4 +15,5 @@ globals: rules: jest/no-identical-title: error jest/no-focused-tests: error + jest/valid-describe: error jest/no-jasmine-globals: error -- cgit v1.2.1 From 44d3590e36e8fb96f5cf4f97768ea4dfcb0450b9 Mon Sep 17 00:00:00 2001 From: Winnie Hellmann Date: Mon, 8 Apr 2019 20:06:14 +0200 Subject: Wrap file template mutation names in template strings --- .../ide/stores/modules/file_templates/mutations_spec.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'spec/frontend') diff --git a/spec/frontend/ide/stores/modules/file_templates/mutations_spec.js b/spec/frontend/ide/stores/modules/file_templates/mutations_spec.js index 8e0e3ae99a1..8e8b7f06ca2 100644 --- a/spec/frontend/ide/stores/modules/file_templates/mutations_spec.js +++ b/spec/frontend/ide/stores/modules/file_templates/mutations_spec.js @@ -9,7 +9,7 @@ describe('IDE file templates mutations', () => { state = createState(); }); - describe(types.REQUEST_TEMPLATE_TYPES, () => { + describe(`${types.REQUEST_TEMPLATE_TYPES}`, () => { it('sets isLoading', () => { mutations[types.REQUEST_TEMPLATE_TYPES](state); @@ -17,7 +17,7 @@ describe('IDE file templates mutations', () => { }); }); - describe(types.RECEIVE_TEMPLATE_TYPES_ERROR, () => { + describe(`${types.RECEIVE_TEMPLATE_TYPES_ERROR}`, () => { it('sets isLoading', () => { state.isLoading = true; @@ -27,7 +27,7 @@ describe('IDE file templates mutations', () => { }); }); - describe(types.RECEIVE_TEMPLATE_TYPES_SUCCESS, () => { + describe(`${types.RECEIVE_TEMPLATE_TYPES_SUCCESS}`, () => { it('sets isLoading to false', () => { state.isLoading = true; @@ -43,7 +43,7 @@ describe('IDE file templates mutations', () => { }); }); - describe(types.SET_SELECTED_TEMPLATE_TYPE, () => { + describe(`${types.SET_SELECTED_TEMPLATE_TYPE}`, () => { it('sets selectedTemplateType', () => { mutations[types.SET_SELECTED_TEMPLATE_TYPE](state, 'type'); @@ -59,7 +59,7 @@ describe('IDE file templates mutations', () => { }); }); - describe(types.SET_UPDATE_SUCCESS, () => { + describe(`${types.SET_UPDATE_SUCCESS}`, () => { it('sets updateSuccess', () => { mutations[types.SET_UPDATE_SUCCESS](state, true); -- cgit v1.2.1 From 84792c29ef6e65deae83c7d9dc97465ee9212981 Mon Sep 17 00:00:00 2001 From: Winnie Hellmann Date: Mon, 8 Apr 2019 20:07:20 +0200 Subject: Wrap import project mutation names in template strings --- spec/frontend/import_projects/store/mutations_spec.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'spec/frontend') diff --git a/spec/frontend/import_projects/store/mutations_spec.js b/spec/frontend/import_projects/store/mutations_spec.js index 8db8e9819ba..505545f7aa5 100644 --- a/spec/frontend/import_projects/store/mutations_spec.js +++ b/spec/frontend/import_projects/store/mutations_spec.js @@ -2,7 +2,7 @@ import * as types from '~/import_projects/store/mutation_types'; import mutations from '~/import_projects/store/mutations'; describe('import_projects store mutations', () => { - describe(types.RECEIVE_IMPORT_SUCCESS, () => { + describe(`${types.RECEIVE_IMPORT_SUCCESS}`, () => { it('removes repoId from reposBeingImported and providerRepos, adds to importedProjects', () => { const repoId = 1; const state = { @@ -20,7 +20,7 @@ describe('import_projects store mutations', () => { }); }); - describe(types.RECEIVE_JOBS_SUCCESS, () => { + describe(`${types.RECEIVE_JOBS_SUCCESS}`, () => { it('updates importStatus of existing importedProjects', () => { const repoId = 1; const state = { importedProjects: [{ id: repoId, importStatus: 'started' }] }; -- cgit v1.2.1 From 41c5733f557c2db74556b868e53b2742239880be Mon Sep 17 00:00:00 2001 From: Winnie Hellmann Date: Mon, 8 Apr 2019 20:09:37 +0200 Subject: Hard code test name in suggestion_diff_row_spec.js --- .../frontend/vue_shared/components/markdown/suggestion_diff_row_spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'spec/frontend') diff --git a/spec/frontend/vue_shared/components/markdown/suggestion_diff_row_spec.js b/spec/frontend/vue_shared/components/markdown/suggestion_diff_row_spec.js index 866d6eb05c6..c8deac1c086 100644 --- a/spec/frontend/vue_shared/components/markdown/suggestion_diff_row_spec.js +++ b/spec/frontend/vue_shared/components/markdown/suggestion_diff_row_spec.js @@ -23,7 +23,7 @@ const newLine = { type: 'new', }; -describe(SuggestionDiffRow.name, () => { +describe('SuggestionDiffRow', () => { let wrapper; const factory = (options = {}) => { -- cgit v1.2.1 From 2704c4a588892e2d1928e0d772610cdaf0f8e760 Mon Sep 17 00:00:00 2001 From: Winnie Hellmann Date: Mon, 8 Apr 2019 20:16:46 +0200 Subject: Hard code test name in timeline_entry_item_spec.js --- spec/frontend/vue_shared/components/notes/timeline_entry_item_spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'spec/frontend') diff --git a/spec/frontend/vue_shared/components/notes/timeline_entry_item_spec.js b/spec/frontend/vue_shared/components/notes/timeline_entry_item_spec.js index c15635f2105..be6c58f0683 100644 --- a/spec/frontend/vue_shared/components/notes/timeline_entry_item_spec.js +++ b/spec/frontend/vue_shared/components/notes/timeline_entry_item_spec.js @@ -1,7 +1,7 @@ import { shallowMount, createLocalVue } from '@vue/test-utils'; import TimelineEntryItem from '~/vue_shared/components/notes/timeline_entry_item.vue'; -describe(TimelineEntryItem.name, () => { +describe(`TimelineEntryItem`, () => { let wrapper; const factory = (options = {}) => { -- cgit v1.2.1 From 7a255af451a1755a9cc3fc2902ba414d9b5a5f07 Mon Sep 17 00:00:00 2001 From: Winnie Hellmann Date: Mon, 8 Apr 2019 20:17:53 +0200 Subject: Wrap modal mutation names in template strings --- spec/frontend/vuex_shared/modules/modal/mutations_spec.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'spec/frontend') diff --git a/spec/frontend/vuex_shared/modules/modal/mutations_spec.js b/spec/frontend/vuex_shared/modules/modal/mutations_spec.js index d07f8ba1e65..eaaf196d1ec 100644 --- a/spec/frontend/vuex_shared/modules/modal/mutations_spec.js +++ b/spec/frontend/vuex_shared/modules/modal/mutations_spec.js @@ -2,7 +2,7 @@ import mutations from '~/vuex_shared/modules/modal/mutations'; import * as types from '~/vuex_shared/modules/modal/mutation_types'; describe('Vuex ModalModule mutations', () => { - describe(types.SHOW, () => { + describe(`${types.SHOW}`, () => { it('sets isVisible to true', () => { const state = { isVisible: false, @@ -16,7 +16,7 @@ describe('Vuex ModalModule mutations', () => { }); }); - describe(types.HIDE, () => { + describe(`${types.HIDE}`, () => { it('sets isVisible to false', () => { const state = { isVisible: true, @@ -30,7 +30,7 @@ describe('Vuex ModalModule mutations', () => { }); }); - describe(types.OPEN, () => { + describe(`${types.OPEN}`, () => { it('sets data and sets isVisible to true', () => { const data = { id: 7 }; const state = { -- cgit v1.2.1