Commit 89d11eb6 authored by Paul Slaughter's avatar Paul Slaughter Committed by Jackie Fraser

Migrate ee mr_widget_options_spec to Jest

- waitForPromises() was needed in the afterEach
  because otherwise mock.restore() happens first
  and we make a bunch of unmocked requests.
parent 3213a26e
...@@ -3,8 +3,9 @@ import MockAdapter from 'axios-mock-adapter'; ...@@ -3,8 +3,9 @@ import MockAdapter from 'axios-mock-adapter';
import mrWidgetOptions from 'ee/vue_merge_request_widget/mr_widget_options.vue'; import mrWidgetOptions from 'ee/vue_merge_request_widget/mr_widget_options.vue';
import MRWidgetStore from 'ee/vue_merge_request_widget/stores/mr_widget_store'; import MRWidgetStore from 'ee/vue_merge_request_widget/stores/mr_widget_store';
import filterByKey from 'ee/vue_shared/security_reports/store/utils/filter_by_key'; import filterByKey from 'ee/vue_shared/security_reports/store/utils/filter_by_key';
import mountComponent from 'spec/helpers/vue_mount_component_helper'; import mountComponent from 'helpers/vue_mount_component_helper';
import { TEST_HOST } from 'spec/test_constants'; import { TEST_HOST } from 'helpers/test_constants';
import waitForPromises from 'helpers/wait_for_promises';
import mockData, { import mockData, {
baseIssues, baseIssues,
...@@ -13,7 +14,7 @@ import mockData, { ...@@ -13,7 +14,7 @@ import mockData, {
headPerformance, headPerformance,
parsedBaseIssues, parsedBaseIssues,
parsedHeadIssues, parsedHeadIssues,
} from 'ee_spec/vue_mr_widget/mock_data'; } from './mock_data';
import { SUCCESS } from '~/vue_merge_request_widget/components/deployment/constants'; import { SUCCESS } from '~/vue_merge_request_widget/components/deployment/constants';
import { convertObjectPropsToCamelCase } from '~/lib/utils/common_utils'; import { convertObjectPropsToCamelCase } from '~/lib/utils/common_utils';
...@@ -25,7 +26,7 @@ import { ...@@ -25,7 +26,7 @@ import {
containerScanningDiffSuccessMock, containerScanningDiffSuccessMock,
dependencyScanningDiffSuccessMock, dependencyScanningDiffSuccessMock,
secretScanningDiffSuccessMock, secretScanningDiffSuccessMock,
} from 'ee_spec/vue_shared/security_reports/mock_data'; } from 'ee_jest/vue_shared/security_reports/mock_data';
const SAST_SELECTOR = '.js-sast-widget'; const SAST_SELECTOR = '.js-sast-widget';
const DAST_SELECTOR = '.js-dast-widget'; const DAST_SELECTOR = '.js-dast-widget';
...@@ -58,9 +59,16 @@ describe('ee merge request widget options', () => { ...@@ -58,9 +59,16 @@ describe('ee merge request widget options', () => {
}); });
afterEach(() => { afterEach(() => {
vm.$destroy(); // This is needed because the `fetchInitialData` is triggered while
mock.restore(); // the `mock.restore` is trying to clean up, causing a bunch of
gon.features = {}; // unmocked requests...
// This is not ideal and will be cleaned up in
// https://gitlab.com/gitlab-org/gitlab/-/issues/214032
return waitForPromises().then(() => {
vm.$destroy();
mock.restore();
gon.features = {};
});
}); });
const findSecurityWidget = () => vm.$el.querySelector('.js-security-widget'); const findSecurityWidget = () => vm.$el.querySelector('.js-security-widget');
...@@ -104,7 +112,7 @@ describe('ee merge request widget options', () => { ...@@ -104,7 +112,7 @@ describe('ee merge request widget options', () => {
}); });
it('should render provided data', done => { it('should render provided data', done => {
setTimeout(() => { setImmediate(() => {
expect( expect(
removeBreakLine( removeBreakLine(
findSecurityWidget().querySelector( findSecurityWidget().querySelector(
...@@ -113,7 +121,7 @@ describe('ee merge request widget options', () => { ...@@ -113,7 +121,7 @@ describe('ee merge request widget options', () => {
), ),
).toEqual('SAST detected 1 new, and 2 fixed vulnerabilities'); ).toEqual('SAST detected 1 new, and 2 fixed vulnerabilities');
done(); done();
}, 0); });
}); });
}); });
...@@ -126,7 +134,7 @@ describe('ee merge request widget options', () => { ...@@ -126,7 +134,7 @@ describe('ee merge request widget options', () => {
}); });
it('should render provided data', done => { it('should render provided data', done => {
setTimeout(() => { setImmediate(() => {
expect( expect(
removeBreakLine( removeBreakLine(
findSecurityWidget().querySelector( findSecurityWidget().querySelector(
...@@ -135,7 +143,7 @@ describe('ee merge request widget options', () => { ...@@ -135,7 +143,7 @@ describe('ee merge request widget options', () => {
).trim(), ).trim(),
).toEqual('SAST detected no vulnerabilities'); ).toEqual('SAST detected no vulnerabilities');
done(); done();
}, 0); });
}); });
}); });
...@@ -148,12 +156,12 @@ describe('ee merge request widget options', () => { ...@@ -148,12 +156,12 @@ describe('ee merge request widget options', () => {
}); });
it('should render error indicator', done => { it('should render error indicator', done => {
setTimeout(() => { setImmediate(() => {
expect( expect(
removeBreakLine(findSecurityWidget().querySelector(SAST_SELECTOR).textContent), removeBreakLine(findSecurityWidget().querySelector(SAST_SELECTOR).textContent),
).toContain('SAST: Loading resulted in an error'); ).toContain('SAST: Loading resulted in an error');
done(); done();
}, 0); });
}); });
}); });
}); });
...@@ -196,7 +204,7 @@ describe('ee merge request widget options', () => { ...@@ -196,7 +204,7 @@ describe('ee merge request widget options', () => {
}); });
it('should render provided data', done => { it('should render provided data', done => {
setTimeout(() => { setImmediate(() => {
expect( expect(
removeBreakLine( removeBreakLine(
findSecurityWidget().querySelector( findSecurityWidget().querySelector(
...@@ -205,7 +213,7 @@ describe('ee merge request widget options', () => { ...@@ -205,7 +213,7 @@ describe('ee merge request widget options', () => {
), ),
).toEqual('Dependency scanning detected 2 new, and 1 fixed vulnerabilities'); ).toEqual('Dependency scanning detected 2 new, and 1 fixed vulnerabilities');
done(); done();
}, 0); });
}); });
}); });
...@@ -222,7 +230,7 @@ describe('ee merge request widget options', () => { ...@@ -222,7 +230,7 @@ describe('ee merge request widget options', () => {
}); });
it('renders no new vulnerabilities message', done => { it('renders no new vulnerabilities message', done => {
setTimeout(() => { setImmediate(() => {
expect( expect(
removeBreakLine( removeBreakLine(
findSecurityWidget().querySelector( findSecurityWidget().querySelector(
...@@ -231,7 +239,7 @@ describe('ee merge request widget options', () => { ...@@ -231,7 +239,7 @@ describe('ee merge request widget options', () => {
), ),
).toEqual('Dependency scanning detected no new vulnerabilities'); ).toEqual('Dependency scanning detected no new vulnerabilities');
done(); done();
}, 0); });
}); });
}); });
...@@ -244,7 +252,7 @@ describe('ee merge request widget options', () => { ...@@ -244,7 +252,7 @@ describe('ee merge request widget options', () => {
}); });
it('should render provided data', done => { it('should render provided data', done => {
setTimeout(() => { setImmediate(() => {
expect( expect(
removeBreakLine( removeBreakLine(
findSecurityWidget().querySelector( findSecurityWidget().querySelector(
...@@ -253,7 +261,7 @@ describe('ee merge request widget options', () => { ...@@ -253,7 +261,7 @@ describe('ee merge request widget options', () => {
), ),
).toEqual('Dependency scanning detected no vulnerabilities'); ).toEqual('Dependency scanning detected no vulnerabilities');
done(); done();
}, 0); });
}); });
}); });
...@@ -265,14 +273,14 @@ describe('ee merge request widget options', () => { ...@@ -265,14 +273,14 @@ describe('ee merge request widget options', () => {
}); });
it('should render error indicator', done => { it('should render error indicator', done => {
setTimeout(() => { setImmediate(() => {
expect( expect(
removeBreakLine( removeBreakLine(
findSecurityWidget().querySelector(DEPENDENCY_SCANNING_SELECTOR).textContent, findSecurityWidget().querySelector(DEPENDENCY_SCANNING_SELECTOR).textContent,
), ),
).toContain('Dependency scanning: Loading resulted in an error'); ).toContain('Dependency scanning: Loading resulted in an error');
done(); done();
}, 0); });
}); });
}); });
}); });
...@@ -320,7 +328,7 @@ describe('ee merge request widget options', () => { ...@@ -320,7 +328,7 @@ describe('ee merge request widget options', () => {
vm.mr.codeclimate = gl.mrWidgetData.codeclimate; vm.mr.codeclimate = gl.mrWidgetData.codeclimate;
// mock worker response // mock worker response
spyOn(MRWidgetStore, 'doCodeClimateComparison').and.callFake(() => jest.spyOn(MRWidgetStore, 'doCodeClimateComparison').mockImplementation(() =>
Promise.resolve({ Promise.resolve({
newIssues: filterByKey(parsedHeadIssues, parsedBaseIssues, 'fingerprint'), newIssues: filterByKey(parsedHeadIssues, parsedBaseIssues, 'fingerprint'),
resolvedIssues: filterByKey(parsedBaseIssues, parsedHeadIssues, 'fingerprint'), resolvedIssues: filterByKey(parsedBaseIssues, parsedHeadIssues, 'fingerprint'),
...@@ -329,19 +337,19 @@ describe('ee merge request widget options', () => { ...@@ -329,19 +337,19 @@ describe('ee merge request widget options', () => {
}); });
it('should render provided data', done => { it('should render provided data', done => {
setTimeout(() => { setImmediate(() => {
expect( expect(
removeBreakLine( removeBreakLine(
vm.$el.querySelector('.js-codequality-widget .js-code-text').textContent, vm.$el.querySelector('.js-codequality-widget .js-code-text').textContent,
), ),
).toEqual('Code quality improved on 1 point and degraded on 1 point'); ).toEqual('Code quality improved on 1 point and degraded on 1 point');
done(); done();
}, 0); });
}); });
describe('text connector', () => { describe('text connector', () => {
it('should only render information about fixed issues', done => { it('should only render information about fixed issues', done => {
setTimeout(() => { setImmediate(() => {
vm.mr.codeclimateMetrics.newIssues = []; vm.mr.codeclimateMetrics.newIssues = [];
Vue.nextTick(() => { Vue.nextTick(() => {
...@@ -352,11 +360,11 @@ describe('ee merge request widget options', () => { ...@@ -352,11 +360,11 @@ describe('ee merge request widget options', () => {
).toEqual('Code quality improved on 1 point'); ).toEqual('Code quality improved on 1 point');
done(); done();
}); });
}, 0); });
}); });
it('should only render information about added issues', done => { it('should only render information about added issues', done => {
setTimeout(() => { setImmediate(() => {
vm.mr.codeclimateMetrics.resolvedIssues = []; vm.mr.codeclimateMetrics.resolvedIssues = [];
Vue.nextTick(() => { Vue.nextTick(() => {
expect( expect(
...@@ -366,7 +374,7 @@ describe('ee merge request widget options', () => { ...@@ -366,7 +374,7 @@ describe('ee merge request widget options', () => {
).toEqual('Code quality degraded on 1 point'); ).toEqual('Code quality degraded on 1 point');
done(); done();
}); });
}, 0); });
}); });
}); });
}); });
...@@ -384,7 +392,7 @@ describe('ee merge request widget options', () => { ...@@ -384,7 +392,7 @@ describe('ee merge request widget options', () => {
vm.mr.codeclimate = gl.mrWidgetData.codeclimate; vm.mr.codeclimate = gl.mrWidgetData.codeclimate;
// mock worker response // mock worker response
spyOn(MRWidgetStore, 'doCodeClimateComparison').and.callFake(() => jest.spyOn(MRWidgetStore, 'doCodeClimateComparison').mockImplementation(() =>
Promise.resolve({ Promise.resolve({
newIssues: filterByKey([], [], 'fingerprint'), newIssues: filterByKey([], [], 'fingerprint'),
resolvedIssues: filterByKey([], [], 'fingerprint'), resolvedIssues: filterByKey([], [], 'fingerprint'),
...@@ -397,14 +405,14 @@ describe('ee merge request widget options', () => { ...@@ -397,14 +405,14 @@ describe('ee merge request widget options', () => {
}); });
it('should render provided data', done => { it('should render provided data', done => {
setTimeout(() => { setImmediate(() => {
expect( expect(
removeBreakLine( removeBreakLine(
vm.$el.querySelector('.js-codequality-widget .js-code-text').textContent, vm.$el.querySelector('.js-codequality-widget .js-code-text').textContent,
), ),
).toEqual('No changes to code quality'); ).toEqual('No changes to code quality');
done(); done();
}, 0); });
}); });
}); });
...@@ -420,22 +428,22 @@ describe('ee merge request widget options', () => { ...@@ -420,22 +428,22 @@ describe('ee merge request widget options', () => {
}); });
it('should render error indicator', done => { it('should render error indicator', done => {
setTimeout(() => { setImmediate(() => {
expect( expect(
removeBreakLine( removeBreakLine(
vm.$el.querySelector('.js-codequality-widget .js-code-text').textContent, vm.$el.querySelector('.js-codequality-widget .js-code-text').textContent,
), ),
).toContain('Failed to load codeclimate report'); ).toContain('Failed to load codeclimate report');
done(); done();
}, 0); });
}); });
it('should render a help icon with more information', done => { it('should render a help icon with more information', done => {
setTimeout(() => { setImmediate(() => {
expect(vm.$el.querySelector('.js-codequality-widget .btn-help')).not.toBeNull(); expect(vm.$el.querySelector('.js-codequality-widget .btn-help')).not.toBeNull();
expect(vm.codequalityPopover.title).toBe('Base pipeline codequality artifact not found'); expect(vm.codequalityPopover.title).toBe('Base pipeline codequality artifact not found');
done(); done();
}, 0); });
}); });
}); });
...@@ -452,18 +460,20 @@ describe('ee merge request widget options', () => { ...@@ -452,18 +460,20 @@ describe('ee merge request widget options', () => {
vm.mr.codeclimate = gl.mrWidgetData.codeclimate; vm.mr.codeclimate = gl.mrWidgetData.codeclimate;
// mock worker rejection // mock worker rejection
spyOn(MRWidgetStore, 'doCodeClimateComparison').and.callFake(() => Promise.reject()); jest
.spyOn(MRWidgetStore, 'doCodeClimateComparison')
.mockImplementation(() => Promise.reject());
}); });
it('should render error indicator', done => { it('should render error indicator', done => {
setTimeout(() => { setImmediate(() => {
expect( expect(
removeBreakLine( removeBreakLine(
vm.$el.querySelector('.js-codequality-widget .js-code-text').textContent, vm.$el.querySelector('.js-codequality-widget .js-code-text').textContent,
), ),
).toEqual('Failed to load codeclimate report'); ).toEqual('Failed to load codeclimate report');
done(); done();
}, 0); });
}); });
}); });
...@@ -481,14 +491,14 @@ describe('ee merge request widget options', () => { ...@@ -481,14 +491,14 @@ describe('ee merge request widget options', () => {
}); });
it('should render error indicator', done => { it('should render error indicator', done => {
setTimeout(() => { setImmediate(() => {
expect( expect(
removeBreakLine( removeBreakLine(
vm.$el.querySelector('.js-codequality-widget .js-code-text').textContent, vm.$el.querySelector('.js-codequality-widget .js-code-text').textContent,
), ),
).toContain('Failed to load codeclimate report'); ).toContain('Failed to load codeclimate report');
done(); done();
}, 0); });
}); });
}); });
}); });
...@@ -536,19 +546,19 @@ describe('ee merge request widget options', () => { ...@@ -536,19 +546,19 @@ describe('ee merge request widget options', () => {
}); });
it('should render provided data', done => { it('should render provided data', done => {
setTimeout(() => { setImmediate(() => {
expect( expect(
removeBreakLine( removeBreakLine(
vm.$el.querySelector('.js-performance-widget .js-code-text').textContent, vm.$el.querySelector('.js-performance-widget .js-code-text').textContent,
), ),
).toEqual('Performance metrics improved on 2 points and degraded on 1 point'); ).toEqual('Performance metrics improved on 2 points and degraded on 1 point');
done(); done();
}, 0); });
}); });
describe('text connector', () => { describe('text connector', () => {
it('should only render information about fixed issues', done => { it('should only render information about fixed issues', done => {
setTimeout(() => { setImmediate(() => {
vm.mr.performanceMetrics.degraded = []; vm.mr.performanceMetrics.degraded = [];
Vue.nextTick(() => { Vue.nextTick(() => {
...@@ -559,11 +569,11 @@ describe('ee merge request widget options', () => { ...@@ -559,11 +569,11 @@ describe('ee merge request widget options', () => {
).toEqual('Performance metrics improved on 2 points'); ).toEqual('Performance metrics improved on 2 points');
done(); done();
}); });
}, 0); });
}); });
it('should only render information about added issues', done => { it('should only render information about added issues', done => {
setTimeout(() => { setImmediate(() => {
vm.mr.performanceMetrics.improved = []; vm.mr.performanceMetrics.improved = [];
Vue.nextTick(() => { Vue.nextTick(() => {
...@@ -574,7 +584,7 @@ describe('ee merge request widget options', () => { ...@@ -574,7 +584,7 @@ describe('ee merge request widget options', () => {
).toEqual('Performance metrics degraded on 1 point'); ).toEqual('Performance metrics degraded on 1 point');
done(); done();
}); });
}, 0); });
}); });
}); });
}); });
...@@ -592,7 +602,7 @@ describe('ee merge request widget options', () => { ...@@ -592,7 +602,7 @@ describe('ee merge request widget options', () => {
vm.mr.performance = gl.mrWidgetData.performance; vm.mr.performance = gl.mrWidgetData.performance;
// wait for network request from component watch update method // wait for network request from component watch update method
setTimeout(done, 0); setImmediate(done);
}); });
it('should render provided data', () => { it('should render provided data', () => {
...@@ -628,14 +638,14 @@ describe('ee merge request widget options', () => { ...@@ -628,14 +638,14 @@ describe('ee merge request widget options', () => {
}); });
it('should render error indicator', done => { it('should render error indicator', done => {
setTimeout(() => { setImmediate(() => {
expect( expect(
removeBreakLine( removeBreakLine(
vm.$el.querySelector('.js-performance-widget .js-code-text').textContent, vm.$el.querySelector('.js-performance-widget .js-code-text').textContent,
), ),
).toContain('Failed to load performance report'); ).toContain('Failed to load performance report');
done(); done();
}, 0); });
}); });
}); });
}); });
...@@ -678,7 +688,7 @@ describe('ee merge request widget options', () => { ...@@ -678,7 +688,7 @@ describe('ee merge request widget options', () => {
}); });
it('should render provided data', done => { it('should render provided data', done => {
setTimeout(() => { setImmediate(() => {
expect( expect(
removeBreakLine( removeBreakLine(
findSecurityWidget().querySelector( findSecurityWidget().querySelector(
...@@ -687,7 +697,7 @@ describe('ee merge request widget options', () => { ...@@ -687,7 +697,7 @@ describe('ee merge request widget options', () => {
), ),
).toEqual('Container scanning detected 2 new, and 1 fixed vulnerabilities'); ).toEqual('Container scanning detected 2 new, and 1 fixed vulnerabilities');
done(); done();
}, 0); });
}); });
}); });
...@@ -700,14 +710,14 @@ describe('ee merge request widget options', () => { ...@@ -700,14 +710,14 @@ describe('ee merge request widget options', () => {
}); });
it('should render error indicator', done => { it('should render error indicator', done => {
setTimeout(() => { setImmediate(() => {
expect( expect(
findSecurityWidget() findSecurityWidget()
.querySelector(CONTAINER_SCANNING_SELECTOR) .querySelector(CONTAINER_SCANNING_SELECTOR)
.textContent.trim(), .textContent.trim(),
).toContain('Container scanning: Loading resulted in an error'); ).toContain('Container scanning: Loading resulted in an error');
done(); done();
}, 0); });
}); });
}); });
}); });
...@@ -750,14 +760,14 @@ describe('ee merge request widget options', () => { ...@@ -750,14 +760,14 @@ describe('ee merge request widget options', () => {
}); });
it('should render provided data', done => { it('should render provided data', done => {
setTimeout(() => { setImmediate(() => {
expect( expect(
findSecurityWidget() findSecurityWidget()
.querySelector(`${DAST_SELECTOR} .report-block-list-issue-description`) .querySelector(`${DAST_SELECTOR} .report-block-list-issue-description`)
.textContent.trim(), .textContent.trim(),
).toEqual('DAST detected 1 new, and 2 fixed vulnerabilities'); ).toEqual('DAST detected 1 new, and 2 fixed vulnerabilities');
done(); done();
}, 0); });
}); });
}); });
...@@ -770,14 +780,14 @@ describe('ee merge request widget options', () => { ...@@ -770,14 +780,14 @@ describe('ee merge request widget options', () => {
}); });
it('should render error indicator', done => { it('should render error indicator', done => {
setTimeout(() => { setImmediate(() => {
expect( expect(
findSecurityWidget() findSecurityWidget()
.querySelector(DAST_SELECTOR) .querySelector(DAST_SELECTOR)
.textContent.trim(), .textContent.trim(),
).toContain('DAST: Loading resulted in an error'); ).toContain('DAST: Loading resulted in an error');
done(); done();
}, 0); });
}); });
}); });
}); });
...@@ -1024,7 +1034,7 @@ describe('ee merge request widget options', () => { ...@@ -1024,7 +1034,7 @@ describe('ee merge request widget options', () => {
describe('CI widget', () => { describe('CI widget', () => {
it('renders the branch in the pipeline widget', () => { it('renders the branch in the pipeline widget', () => {
const sourceBranchLink = '<a href="https://www.zelda.com/">Link</a>'; const sourceBranchLink = '<a href="/to/the/past">Link</a>';
vm = mountComponent(Component, { vm = mountComponent(Component, {
mrData: { mrData: {
...mockData, ...mockData,
...@@ -1034,7 +1044,7 @@ describe('ee merge request widget options', () => { ...@@ -1034,7 +1044,7 @@ describe('ee merge request widget options', () => {
const ciWidget = vm.$el.querySelector('.mr-state-widget .label-branch'); const ciWidget = vm.$el.querySelector('.mr-state-widget .label-branch');
expect(ciWidget).toContainHtml(sourceBranchLink); expect(ciWidget.innerHTML).toBe(sourceBranchLink);
}); });
}); });
...@@ -1076,7 +1086,7 @@ describe('ee merge request widget options', () => { ...@@ -1076,7 +1086,7 @@ describe('ee merge request widget options', () => {
const helperText = getHelperTextElement(); const helperText = getHelperTextElement();
expect(helperText).toExist(); expect(helperText).toExist();
expect(helperText).toContainText( expect(helperText.textContent).toContain(
'This merge request will be added to the merge train when pipeline #123 succeeds.', 'This merge request will be added to the merge train when pipeline #123 succeeds.',
); );
}); });
...@@ -1099,7 +1109,7 @@ describe('ee merge request widget options', () => { ...@@ -1099,7 +1109,7 @@ describe('ee merge request widget options', () => {
const helperText = getHelperTextElement(); const helperText = getHelperTextElement();
expect(helperText).toExist(); expect(helperText).toExist();
expect(helperText).toContainText( expect(helperText.textContent).toContain(
'This merge request will start a merge train when pipeline #123 succeeds.', 'This merge request will start a merge train when pipeline #123 succeeds.',
); );
}); });
...@@ -1122,7 +1132,7 @@ describe('ee merge request widget options', () => { ...@@ -1122,7 +1132,7 @@ describe('ee merge request widget options', () => {
const pipelineLink = getHelperTextElement().querySelector('.js-pipeline-link'); const pipelineLink = getHelperTextElement().querySelector('.js-pipeline-link');
expect(pipelineLink).toExist(); expect(pipelineLink).toExist();
expect(pipelineLink).toContainText('#123'); expect(pipelineLink.textContent).toContain('#123');
expect(pipelineLink).toHaveAttr('href', 'path/to/pipeline'); expect(pipelineLink).toHaveAttr('href', 'path/to/pipeline');
}); });
...@@ -1142,7 +1152,7 @@ describe('ee merge request widget options', () => { ...@@ -1142,7 +1152,7 @@ describe('ee merge request widget options', () => {
const pipelineLink = getHelperTextElement().querySelector('.js-documentation-link'); const pipelineLink = getHelperTextElement().querySelector('.js-documentation-link');
expect(pipelineLink).toExist(); expect(pipelineLink).toExist();
expect(pipelineLink).toContainText('More information'); expect(pipelineLink.textContent).toContain('More information');
expect(pipelineLink).toHaveAttr('href', 'path/to/help'); expect(pipelineLink).toHaveAttr('href', 'path/to/help');
}); });
}); });
...@@ -1163,7 +1173,7 @@ describe('ee merge request widget options', () => { ...@@ -1163,7 +1173,7 @@ describe('ee merge request widget options', () => {
}, },
}); });
expect(vm.service).toEqual(jasmine.objectContaining(convertObjectPropsToCamelCase(paths))); expect(vm.service).toEqual(expect.objectContaining(convertObjectPropsToCamelCase(paths)));
}); });
}); });
......
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