Skip to content

Commit 004a096

Browse files
devversionvictoriaaa234
authored andcommitted
build: fix small browser test coverage (#11970)
* No longer just runs the tests against the first browser of a test platform (travis, saucelabs, browserstack) * Stability is more valuable than speed (runs sequentially on CI now) * Update Saucelabs Connect * Remove unused spec reporter * Update from Edge 14 to Edge 17 * Fix pixel deviations in Edge 17
1 parent e3764d4 commit 004a096

11 files changed

+2378
-1842
lines changed

package-lock.json

Lines changed: 2181 additions & 1683 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,16 +100,14 @@
100100
"image-diff": "^1.6.3",
101101
"jasmine-core": "2.8.0",
102102
"jsonwebtoken": "^7.4.1",
103-
"karma": "^1.7.1",
103+
"karma": "^2.0.4",
104104
"karma-browserstack-launcher": "^1.3.0",
105105
"karma-chrome-launcher": "^2.2.0",
106106
"karma-coverage": "^1.1.1",
107107
"karma-firefox-launcher": "^1.0.1",
108108
"karma-jasmine": "^1.1.0",
109109
"karma-sauce-launcher": "^1.2.0",
110-
"karma-sharding": "^4.4.0",
111110
"karma-sourcemap-loader": "^0.3.7",
112-
"karma-spec-reporter": "^0.0.32",
113111
"madge": "^2.2.0",
114112
"magic-string": "^0.22.4",
115113
"minimatch": "^3.0.4",

scripts/saucelabs/start-tunnel.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
set -e -o pipefail
44

5-
TUNNEL_FILE="sc-4.4.10-linux.tar.gz"
5+
TUNNEL_FILE="sc-4.4.12-linux.tar.gz"
66
TUNNEL_URL="https://saucelabs.com/downloads/${TUNNEL_FILE}"
77
TUNNEL_DIR="/tmp/saucelabs-connect"
88

src/cdk/table/table.spec.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -726,8 +726,16 @@ describe('CdkTable', () => {
726726
return;
727727
}
728728

729-
expect(element.style[d])
730-
.toBe(directions[d], `Expected direction ${d} to be ${directions[d]}`);
729+
const expectationMessage = `Expected direction ${d} to be ${directions[d]}`;
730+
731+
// If the direction contains `px`, we parse the number to be able to avoid deviations
732+
// caused by individual browsers.
733+
if (directions[d].includes('px')) {
734+
expect(Math.round(parseInt(element.style[d])))
735+
.toBe(Math.round(parseInt(directions[d])), expectationMessage);
736+
} else {
737+
expect(element.style[d]).toBe(directions[d], expectationMessage);
738+
}
731739
});
732740
}
733741

src/lib/select/select.spec.ts

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3361,8 +3361,14 @@ describe('MatSelect', () => {
33613361
fixture.componentInstance.heightBelow = 400;
33623362
fixture.detectChanges();
33633363

3364-
// Scroll the select into view
3365-
setScrollTop(1700);
3364+
// Space that is needed in order to show the menu below the trigger.
3365+
// 256 (height of the menu overlay) - 45 (estimated height of the trigger)
3366+
const requiredSpaceBelow = 256 - 45;
3367+
3368+
// Scroll the select into view. Make sure that there is enough space for the menu
3369+
// to open below the trigger (depending on the screen resolution)
3370+
setScrollTop(2000 - requiredSpaceBelow);
3371+
33663372

33673373
// In the iOS simulator (BrowserStack & SauceLabs), adding the content to the
33683374
// body causes karma's iframe for the test to stretch to fit that content once we attempt to
@@ -3389,8 +3395,15 @@ describe('MatSelect', () => {
33893395
fixture.detectChanges();
33903396
flush();
33913397

3392-
// Scroll the select into view
3393-
setScrollTop(1700);
3398+
// Space that is needed in order to show the menu below the trigger.
3399+
// 256 (height of the menu overlay) - 45 (estimated height of the trigger)
3400+
// Even though there might be less options displayed below the trigger because the
3401+
// selected option is the fourth item, we want to make sure we have enough space here.
3402+
const requiredSpaceBelow = 256 - 45;
3403+
3404+
// Scroll the select into view. Make sure that there is enough space for the menu
3405+
// to open below the trigger (depending on the screen resolution)
3406+
setScrollTop(2000 - requiredSpaceBelow);
33943407

33953408
// In the iOS simulator (BrowserStack & SauceLabs), adding the content to the
33963409
// body causes karma's iframe for the test to stretch to fit that content once we attempt

test/browser-providers.js

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@ const browserConfig = {
99
'FirefoxHeadless': { unitTest: {target: 'TC', required: true }},
1010
'ChromeBeta': { unitTest: {target: null, required: false }},
1111
'FirefoxBeta': { unitTest: {target: null, required: false }},
12-
'ChromeDev': { unitTest: {target: null, required: true }},
13-
'FirefoxDev': { unitTest: {target: null, required: true }},
12+
'ChromeDev': { unitTest: {target: null, required: false }},
13+
'FirefoxDev': { unitTest: {target: null, required: false }},
1414
'IE9': { unitTest: {target: null, required: false }},
15-
'IE10': { unitTest: {target: null, required: true }},
15+
'IE10': { unitTest: {target: null, required: false }},
1616
'IE11': { unitTest: {target: null, required: false }},
17-
'Edge': { unitTest: {target: 'SL', required: true }},
17+
'Edge': { unitTest: {target: 'BS', required: true }},
1818
'Android4.1': { unitTest: {target: null, required: false }},
1919
'Android4.2': { unitTest: {target: null, required: false }},
2020
'Android4.3': { unitTest: {target: null, required: false }},
@@ -27,7 +27,10 @@ const browserConfig = {
2727
'iOS7': { unitTest: {target: null, required: false }},
2828
'iOS8': { unitTest: {target: null, required: false }},
2929
'iOS9': { unitTest: {target: null, required: false }},
30-
'iOS10': { unitTest: {target: 'BS', required: true }},
30+
'iOS10': { unitTest: {target: null, required: false }},
31+
// Don't use Browserstack until our open-source license includes automate testing on
32+
// mobile devices. For now, we need to use Saucelabs to keep our coverage.
33+
'iOS11': { unitTest: {target: 'SL', required: true }},
3134
'WindowsPhone': { unitTest: {target: null, required: false }}
3235
};
3336

test/karma-system-config.js

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
// Configure the base path and map the different node packages.
2+
System.config({
3+
baseURL: '/base',
4+
paths: {
5+
'node:*': 'node_modules/*'
6+
},
7+
map: {
8+
'rxjs': 'node:rxjs',
9+
'tslib': 'node:tslib/tslib.js',
10+
'moment': 'node:moment/min/moment-with-locales.min.js',
11+
12+
// Angular specific mappings.
13+
'@angular/core': 'node:@angular/core/bundles/core.umd.js',
14+
'@angular/core/testing': 'node:@angular/core/bundles/core-testing.umd.min.js',
15+
'@angular/common': 'node:@angular/common/bundles/common.umd.min.js',
16+
'@angular/common/testing': 'node:@angular/common/bundles/common-testing.umd.min.js',
17+
'@angular/common/http': 'node:@angular/common/bundles/common-http.umd.min.js',
18+
'@angular/common/http/testing': 'node:@angular/common/bundles/common-http-testing.umd.min.js',
19+
'@angular/compiler': 'node:@angular/compiler/bundles/compiler.umd.min.js',
20+
'@angular/compiler/testing': 'node:@angular/compiler/bundles/compiler-testing.umd.min.js',
21+
'@angular/forms': 'node:@angular/forms/bundles/forms.umd.min.js',
22+
'@angular/forms/testing': 'node:@angular/forms/bundles/forms-testing.umd.min.js',
23+
'@angular/animations': 'node:@angular/animations/bundles/animations.umd.min.js',
24+
'@angular/animations/browser': 'node:@angular/animations/bundles/animations-browser.umd.min.js',
25+
'@angular/platform-browser/animations':
26+
'node:@angular/platform-browser/bundles/platform-browser-animations.umd.min.js',
27+
'@angular/platform-browser':
28+
'node:@angular/platform-browser/bundles/platform-browser.umd.min.js',
29+
'@angular/platform-browser/testing':
30+
'node:@angular/platform-browser/bundles/platform-browser-testing.umd.min.js',
31+
'@angular/platform-browser-dynamic':
32+
'node:@angular/platform-browser-dynamic/bundles/platform-browser-dynamic.umd.min.js',
33+
'@angular/platform-browser-dynamic/testing':
34+
'node:@angular/platform-browser-dynamic/bundles/platform-browser-dynamic-testing.umd.min.js',
35+
36+
// Path mappings for local packages that can be imported inside of tests.
37+
'@angular/material': 'dist/packages/material/index.js',
38+
'@angular/material-experimental': 'dist/packages/material-experimental/index.js',
39+
'@angular/cdk-experimental': 'dist/packages/cdk-experimental/index.js',
40+
41+
'@angular/cdk': 'dist/packages/cdk/index.js',
42+
'@angular/cdk/a11y': 'dist/packages/cdk/a11y/index.js',
43+
'@angular/cdk/accordion': 'dist/packages/cdk/accordion/index.js',
44+
'@angular/cdk/bidi': 'dist/packages/cdk/bidi/index.js',
45+
'@angular/cdk/coercion': 'dist/packages/cdk/coercion/index.js',
46+
'@angular/cdk/collections': 'dist/packages/cdk/collections/index.js',
47+
'@angular/cdk/keycodes': 'dist/packages/cdk/keycodes/index.js',
48+
'@angular/cdk/layout': 'dist/packages/cdk/layout/index.js',
49+
'@angular/cdk/observers': 'dist/packages/cdk/observers/index.js',
50+
'@angular/cdk/overlay': 'dist/packages/cdk/overlay/index.js',
51+
'@angular/cdk/platform': 'dist/packages/cdk/platform/index.js',
52+
'@angular/cdk/portal': 'dist/packages/cdk/portal/index.js',
53+
'@angular/cdk/scrolling': 'dist/packages/cdk/scrolling/index.js',
54+
'@angular/cdk/stepper': 'dist/packages/cdk/stepper/index.js',
55+
'@angular/cdk/table': 'dist/packages/cdk/table/index.js',
56+
'@angular/cdk/testing': 'dist/packages/cdk/testing/index.js',
57+
'@angular/cdk/text-field': 'dist/packages/cdk/text-field/index.js',
58+
'@angular/cdk/tree': 'dist/packages/cdk/tree/index.js',
59+
60+
'@angular/cdk-experimental/scrolling': 'dist/packages/cdk-experimental/scrolling/index.js',
61+
'@angular/cdk-experimental/dialog': 'dist/packages/cdk-experimental/dialog/index.js',
62+
'@angular/cdk-experimental/drag-drop':
63+
'dist/packages/cdk-experimental/drag-drop/index.js',
64+
65+
'@angular/material/autocomplete': 'dist/packages/material/autocomplete/index.js',
66+
'@angular/material/badge': 'dist/packages/material/badge/index.js',
67+
'@angular/material/bottom-sheet': 'dist/packages/material/bottom-sheet/index.js',
68+
'@angular/material/button': 'dist/packages/material/button/index.js',
69+
'@angular/material/button-toggle': 'dist/packages/material/button-toggle/index.js',
70+
'@angular/material/card': 'dist/packages/material/card/index.js',
71+
'@angular/material/checkbox': 'dist/packages/material/checkbox/index.js',
72+
'@angular/material/chips': 'dist/packages/material/chips/index.js',
73+
'@angular/material/core': 'dist/packages/material/core/index.js',
74+
'@angular/material/datepicker': 'dist/packages/material/datepicker/index.js',
75+
'@angular/material/dialog': 'dist/packages/material/dialog/index.js',
76+
'@angular/material/divider': 'dist/packages/material/divider/index.js',
77+
'@angular/material/expansion': 'dist/packages/material/expansion/index.js',
78+
'@angular/material/form-field': 'dist/packages/material/form-field/index.js',
79+
'@angular/material/grid-list': 'dist/packages/material/grid-list/index.js',
80+
'@angular/material/icon': 'dist/packages/material/icon/index.js',
81+
'@angular/material/input': 'dist/packages/material/input/index.js',
82+
'@angular/material/list': 'dist/packages/material/list/index.js',
83+
'@angular/material/menu': 'dist/packages/material/menu/index.js',
84+
'@angular/material/paginator': 'dist/packages/material/paginator/index.js',
85+
'@angular/material/progress-bar': 'dist/packages/material/progress-bar/index.js',
86+
'@angular/material/progress-spinner': 'dist/packages/material/progress-spinner/index.js',
87+
'@angular/material/radio': 'dist/packages/material/radio/index.js',
88+
'@angular/material/select': 'dist/packages/material/select/index.js',
89+
'@angular/material/sidenav': 'dist/packages/material/sidenav/index.js',
90+
'@angular/material/slide-toggle': 'dist/packages/material/slide-toggle/index.js',
91+
'@angular/material/slider': 'dist/packages/material/slider/index.js',
92+
'@angular/material/snack-bar': 'dist/packages/material/snack-bar/index.js',
93+
'@angular/material/sort': 'dist/packages/material/sort/index.js',
94+
'@angular/material/stepper': 'dist/packages/material/stepper/index.js',
95+
'@angular/material/table': 'dist/packages/material/table/index.js',
96+
'@angular/material/tabs': 'dist/packages/material/tabs/index.js',
97+
'@angular/material/toolbar': 'dist/packages/material/toolbar/index.js',
98+
'@angular/material/tooltip': 'dist/packages/material/tooltip/index.js',
99+
'@angular/material/tree': 'dist/packages/material/tree/index.js',
100+
},
101+
packages: {
102+
// Thirdparty barrels.
103+
'rxjs': {main: 'index'},
104+
'rxjs/operators': {main: 'index'},
105+
106+
// Set the default extension for the root package, because otherwise the demo-app can't
107+
// be built within the production mode. Due to missing file extensions.
108+
'.': {
109+
defaultExtension: 'js'
110+
}
111+
}
112+
});

test/karma-test-shim.js

Lines changed: 0 additions & 115 deletions
Original file line numberDiff line numberDiff line change
@@ -8,123 +8,8 @@ jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
88

99
__karma__.loaded = function () {};
1010

11-
var baseDir = '/base';
1211
var specFiles = Object.keys(window.__karma__.files).filter(isMaterialSpecFile);
1312

14-
// Configure the base path and map the different node packages.
15-
System.config({
16-
baseURL: baseDir,
17-
paths: {
18-
'node:*': 'node_modules/*'
19-
},
20-
map: {
21-
'rxjs': 'node:rxjs',
22-
'main': 'main.js',
23-
'tslib': 'node:tslib/tslib.js',
24-
'moment': 'node:moment/min/moment-with-locales.min.js',
25-
26-
// Angular specific mappings.
27-
'@angular/core': 'node:@angular/core/bundles/core.umd.js',
28-
'@angular/core/testing': 'node:@angular/core/bundles/core-testing.umd.js',
29-
'@angular/common': 'node:@angular/common/bundles/common.umd.js',
30-
'@angular/common/testing': 'node:@angular/common/bundles/common-testing.umd.js',
31-
'@angular/common/http': 'node:@angular/common/bundles/common-http.umd.js',
32-
'@angular/common/http/testing': 'node:@angular/common/bundles/common-http-testing.umd.js',
33-
'@angular/compiler': 'node:@angular/compiler/bundles/compiler.umd.js',
34-
'@angular/compiler/testing': 'node:@angular/compiler/bundles/compiler-testing.umd.js',
35-
'@angular/forms': 'node:@angular/forms/bundles/forms.umd.js',
36-
'@angular/forms/testing': 'node:@angular/forms/bundles/forms-testing.umd.js',
37-
'@angular/animations': 'node:@angular/animations/bundles/animations.umd.js',
38-
'@angular/animations/browser': 'node:@angular/animations/bundles/animations-browser.umd.js',
39-
'@angular/platform-browser/animations':
40-
'node:@angular/platform-browser/bundles/platform-browser-animations.umd',
41-
'@angular/platform-browser':
42-
'node:@angular/platform-browser/bundles/platform-browser.umd.js',
43-
'@angular/platform-browser/testing':
44-
'node:@angular/platform-browser/bundles/platform-browser-testing.umd.js',
45-
'@angular/platform-browser-dynamic':
46-
'node:@angular/platform-browser-dynamic/bundles/platform-browser-dynamic.umd.js',
47-
'@angular/platform-browser-dynamic/testing':
48-
'node:@angular/platform-browser-dynamic/bundles/platform-browser-dynamic-testing.umd.js',
49-
50-
// Path mappings for local packages that can be imported inside of tests.
51-
'@angular/material': 'dist/packages/material/index.js',
52-
'@angular/material-experimental': 'dist/packages/material-experimental/index.js',
53-
'@angular/cdk-experimental': 'dist/packages/cdk-experimental/index.js',
54-
55-
'@angular/cdk': 'dist/packages/cdk/index.js',
56-
'@angular/cdk/a11y': 'dist/packages/cdk/a11y/index.js',
57-
'@angular/cdk/accordion': 'dist/packages/cdk/accordion/index.js',
58-
'@angular/cdk/bidi': 'dist/packages/cdk/bidi/index.js',
59-
'@angular/cdk/coercion': 'dist/packages/cdk/coercion/index.js',
60-
'@angular/cdk/collections': 'dist/packages/cdk/collections/index.js',
61-
'@angular/cdk/keycodes': 'dist/packages/cdk/keycodes/index.js',
62-
'@angular/cdk/layout': 'dist/packages/cdk/layout/index.js',
63-
'@angular/cdk/observers': 'dist/packages/cdk/observers/index.js',
64-
'@angular/cdk/overlay': 'dist/packages/cdk/overlay/index.js',
65-
'@angular/cdk/platform': 'dist/packages/cdk/platform/index.js',
66-
'@angular/cdk/portal': 'dist/packages/cdk/portal/index.js',
67-
'@angular/cdk/scrolling': 'dist/packages/cdk/scrolling/index.js',
68-
'@angular/cdk/stepper': 'dist/packages/cdk/stepper/index.js',
69-
'@angular/cdk/table': 'dist/packages/cdk/table/index.js',
70-
'@angular/cdk/testing': 'dist/packages/cdk/testing/index.js',
71-
'@angular/cdk/text-field': 'dist/packages/cdk/text-field/index.js',
72-
'@angular/cdk/tree': 'dist/packages/cdk/tree/index.js',
73-
74-
'@angular/cdk-experimental/scrolling': 'dist/packages/cdk-experimental/scrolling/index.js',
75-
'@angular/cdk-experimental/dialog': 'dist/packages/cdk-experimental/dialog/index.js',
76-
'@angular/cdk-experimental/drag-drop':
77-
'dist/packages/cdk-experimental/drag-drop/index.js',
78-
79-
'@angular/material/autocomplete': 'dist/packages/material/autocomplete/index.js',
80-
'@angular/material/badge': 'dist/packages/material/badge/index.js',
81-
'@angular/material/bottom-sheet': 'dist/packages/material/bottom-sheet/index.js',
82-
'@angular/material/button': 'dist/packages/material/button/index.js',
83-
'@angular/material/button-toggle': 'dist/packages/material/button-toggle/index.js',
84-
'@angular/material/card': 'dist/packages/material/card/index.js',
85-
'@angular/material/checkbox': 'dist/packages/material/checkbox/index.js',
86-
'@angular/material/chips': 'dist/packages/material/chips/index.js',
87-
'@angular/material/core': 'dist/packages/material/core/index.js',
88-
'@angular/material/datepicker': 'dist/packages/material/datepicker/index.js',
89-
'@angular/material/dialog': 'dist/packages/material/dialog/index.js',
90-
'@angular/material/divider': 'dist/packages/material/divider/index.js',
91-
'@angular/material/expansion': 'dist/packages/material/expansion/index.js',
92-
'@angular/material/form-field': 'dist/packages/material/form-field/index.js',
93-
'@angular/material/grid-list': 'dist/packages/material/grid-list/index.js',
94-
'@angular/material/icon': 'dist/packages/material/icon/index.js',
95-
'@angular/material/input': 'dist/packages/material/input/index.js',
96-
'@angular/material/list': 'dist/packages/material/list/index.js',
97-
'@angular/material/menu': 'dist/packages/material/menu/index.js',
98-
'@angular/material/paginator': 'dist/packages/material/paginator/index.js',
99-
'@angular/material/progress-bar': 'dist/packages/material/progress-bar/index.js',
100-
'@angular/material/progress-spinner': 'dist/packages/material/progress-spinner/index.js',
101-
'@angular/material/radio': 'dist/packages/material/radio/index.js',
102-
'@angular/material/select': 'dist/packages/material/select/index.js',
103-
'@angular/material/sidenav': 'dist/packages/material/sidenav/index.js',
104-
'@angular/material/slide-toggle': 'dist/packages/material/slide-toggle/index.js',
105-
'@angular/material/slider': 'dist/packages/material/slider/index.js',
106-
'@angular/material/snack-bar': 'dist/packages/material/snack-bar/index.js',
107-
'@angular/material/sort': 'dist/packages/material/sort/index.js',
108-
'@angular/material/stepper': 'dist/packages/material/stepper/index.js',
109-
'@angular/material/table': 'dist/packages/material/table/index.js',
110-
'@angular/material/tabs': 'dist/packages/material/tabs/index.js',
111-
'@angular/material/toolbar': 'dist/packages/material/toolbar/index.js',
112-
'@angular/material/tooltip': 'dist/packages/material/tooltip/index.js',
113-
'@angular/material/tree': 'dist/packages/material/tree/index.js',
114-
},
115-
packages: {
116-
// Thirdparty barrels.
117-
'rxjs': {main: 'index'},
118-
'rxjs/operators': {main: 'index'},
119-
120-
// Set the default extension for the root package, because otherwise the demo-app can't
121-
// be built within the production mode. Due to missing file extensions.
122-
'.': {
123-
defaultExtension: 'js'
124-
}
125-
}
126-
});
127-
12813
// Configure the Angular test bed and run all specs once configured.
12914
configureTestBed()
13015
.then(runMaterialSpecs)

0 commit comments

Comments
 (0)