forked from carbon-design-system/carbon
-
Notifications
You must be signed in to change notification settings - Fork 0
/
playwright.config.js
121 lines (105 loc) · 3.09 KB
/
playwright.config.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
/**
* Copyright IBM Corp. 2016, 2023
*
* This source code is licensed under the Apache-2.0 license found in the
* LICENSE file in the root directory of this source tree.
*/
const { devices, expect } = require('@playwright/test');
const path = require('path');
const config = {
// https://playwright.dev/docs/api/class-testconfig#test-config-test-dir
testDir: path.join(__dirname, 'e2e'),
// https://playwright.dev/docs/api/class-testconfig#test-config-test-ignore
testIgnore: [
path.join(__dirname, 'e2e', 'icons'),
path.join(__dirname, 'e2e', 'icons-react'),
path.join(__dirname, 'e2e', 'icons-vue'),
path.join(__dirname, 'e2e', 'pictograms'),
path.join(__dirname, 'e2e', 'pictograms-react'),
],
// https://playwright.dev/docs/api/class-testconfig#test-config-test-match
testMatch: /.*-test(.avt|.vrt)?.e2e\.m?js$/,
// https://playwright.dev/docs/api/class-testconfig#test-config-timeout
timeout: 10000 * 30,
// https://playwright.dev/docs/test-timeouts
expect: { timeout: 100000 },
// https://playwright.dev/docs/api/class-testconfig#test-config-output-dir
outputDir: path.join(__dirname, '.playwright', 'results'),
snapshotDir: path.join(__dirname, '.playwright', 'snapshots'),
// https://playwright.dev/docs/test-parallel#parallelize-tests-in-a-single-file
// fullyParallel: true,
forbidOnly: !!process.env.CI,
retries: process.env.CI ? 2 : 0,
use: {
baseURL: 'http://localhost:3000',
trace: 'on-first-retry',
},
projects: [
// Desktop
{
name: 'chromium',
use: {
...devices['Desktop Chrome'],
},
},
],
reporter: [
['line'],
[
'json',
{
outputFile: path.join(__dirname, '.playwright', 'results.json'),
},
],
[
'json',
{
outputFile: path.join(
__dirname,
'packages/react/.playwright',
'INTERNAL_AVT_REPORT_DO_NOT_USE.json'
),
},
],
],
};
let aChecker;
expect.extend({
async toHaveNoACViolations(page, id) {
if (!aChecker) {
aChecker = require('accessibility-checker');
const denylist = new Set([
'html_lang_exists',
'page_title_exists',
'skip_main_exists',
'html_skipnav_exists',
'aria_content_in_landmark',
'aria_child_tabbable',
]);
const ruleset = await aChecker.getRuleset('IBM_Accessibility');
const customRuleset = JSON.parse(JSON.stringify(ruleset));
customRuleset.id = 'Custom_Ruleset';
customRuleset.checkpoints = customRuleset.checkpoints.map(
(checkpoint) => {
checkpoint.rules = checkpoint.rules.filter((rule) => {
return !denylist.has(rule.id);
});
return checkpoint;
}
);
aChecker.addRuleset(customRuleset);
}
const result = await aChecker.getCompliance(page, id);
if (aChecker.assertCompliance(result.report) === 0) {
return {
pass: true,
};
} else {
return {
pass: false,
message: () => aChecker.stringifyResults(result.report),
};
}
},
});
module.exports = config;