120 lines
4.4 KiB
JavaScript
120 lines
4.4 KiB
JavaScript
/**
|
|
* @license
|
|
* Copyright 2021 Google LLC
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
*/
|
|
|
|
import {legacyPlugin} from '@web/dev-server-legacy';
|
|
import {playwrightLauncher} from '@web/test-runner-playwright';
|
|
|
|
// Uncomment for testing on Sauce Labs
|
|
// Must run `npm i --save-dev @web/test-runner-saucelabs` and set
|
|
// SAUCE_USERNAME and SAUCE_USERNAME environment variables
|
|
// ===========
|
|
// import {createSauceLabsLauncher} from '@web/test-runner-saucelabs';
|
|
// const sauceLabsLauncher = createSauceLabsLauncher(
|
|
// {
|
|
// user: process.env.SAUCE_USERNAME,
|
|
// key: process.env.SAUCE_USERNAME,
|
|
// },
|
|
// {
|
|
// 'sauce:options': {
|
|
// name: 'unit tests',
|
|
// build: `${process.env.GITHUB_REF ?? 'local'} build ${
|
|
// process.env.GITHUB_RUN_NUMBER ?? ''
|
|
// }`,
|
|
// },
|
|
// }
|
|
// );
|
|
|
|
// Uncomment for testing on BrowserStack
|
|
// Must run `npm i --save-dev @web/test-runner-browserstack` and set
|
|
// BROWSER_STACK_USERNAME and BROWSER_STACK_ACCESS_KEY environment variables
|
|
// ===========
|
|
// import {browserstackLauncher as createBrowserstackLauncher} from '@web/test-runner-browserstack';
|
|
// const browserstackLauncher = (config) => createBrowserstackLauncher({
|
|
// capabilities: {
|
|
// 'browserstack.user': process.env.BROWSER_STACK_USERNAME,
|
|
// 'browserstack.key': process.env.BROWSER_STACK_ACCESS_KEY,
|
|
// project: 'my-element',
|
|
// name: 'unit tests',
|
|
// build: `${process.env.GITHUB_REF ?? 'local'} build ${
|
|
// process.env.GITHUB_RUN_NUMBER ?? ''
|
|
// }`,
|
|
// ...config,
|
|
// }
|
|
// });
|
|
|
|
const browsers = {
|
|
// Local browser testing via playwright
|
|
// ===========
|
|
chromium: playwrightLauncher({product: 'chromium'}),
|
|
firefox: playwrightLauncher({product: 'firefox'}),
|
|
webkit: playwrightLauncher({product: 'webkit'}),
|
|
|
|
// Uncomment example launchers for running on Sauce Labs
|
|
// ===========
|
|
// chromium: sauceLabsLauncher({browserName: 'chrome', browserVersion: 'latest', platformName: 'Windows 10'}),
|
|
// firefox: sauceLabsLauncher({browserName: 'firefox', browserVersion: 'latest', platformName: 'Windows 10'}),
|
|
// edge: sauceLabsLauncher({browserName: 'MicrosoftEdge', browserVersion: 'latest', platformName: 'Windows 10'}),
|
|
// ie11: sauceLabsLauncher({browserName: 'internet explorer', browserVersion: '11.0', platformName: 'Windows 10'}),
|
|
// safari: sauceLabsLauncher({browserName: 'safari', browserVersion: 'latest', platformName: 'macOS 10.15'}),
|
|
|
|
// Uncomment example launchers for running on Sauce Labs
|
|
// ===========
|
|
// chromium: browserstackLauncher({browserName: 'Chrome', os: 'Windows', os_version: '10'}),
|
|
// firefox: browserstackLauncher({browserName: 'Firefox', os: 'Windows', os_version: '10'}),
|
|
// edge: browserstackLauncher({browserName: 'MicrosoftEdge', os: 'Windows', os_version: '10'}),
|
|
// ie11: browserstackLauncher({browserName: 'IE', browser_version: '11.0', os: 'Windows', os_version: '10'}),
|
|
// safari: browserstackLauncher({browserName: 'Safari', browser_version: '14.0', os: 'OS X', os_version: 'Big Sur'}),
|
|
};
|
|
|
|
// Prepend BROWSERS=x,y to `npm run test` to run a subset of browsers
|
|
// e.g. `BROWSERS=chromium,firefox npm run test`
|
|
const noBrowser = (b) => {
|
|
throw new Error(`No browser configured named '${b}'; using defaults`);
|
|
};
|
|
let commandLineBrowsers;
|
|
try {
|
|
commandLineBrowsers = process.env.BROWSERS?.split(',').map(
|
|
(b) => browsers[b] ?? noBrowser(b)
|
|
);
|
|
} catch (e) {
|
|
console.warn(e);
|
|
}
|
|
|
|
// https://modern-web.dev/docs/test-runner/cli-and-configuration/
|
|
export default {
|
|
rootDir: '.',
|
|
files: ['./test/**/*_test.js'],
|
|
nodeResolve: true,
|
|
preserveSymlinks: true,
|
|
browsers: commandLineBrowsers ?? Object.values(browsers),
|
|
testFramework: {
|
|
// https://mochajs.org/api/mocha
|
|
config: {
|
|
ui: 'tdd',
|
|
},
|
|
},
|
|
plugins: [
|
|
// Detect browsers without modules (e.g. IE11) and transform to SystemJS
|
|
// (https://modern-web.dev/docs/dev-server/plugins/legacy/).
|
|
legacyPlugin({
|
|
polyfills: {
|
|
webcomponents: true,
|
|
// Inject lit's polyfill-support module into test files, which is required
|
|
// for interfacing with the webcomponents polyfills
|
|
custom: [
|
|
{
|
|
name: 'lit-polyfill-support',
|
|
path: 'node_modules/lit/polyfill-support.js',
|
|
test:
|
|
"!('attachShadow' in Element.prototype) || !('getRootNode' in Element.prototype) || window.ShadyDOM && window.ShadyDOM.force",
|
|
module: false,
|
|
},
|
|
],
|
|
},
|
|
}),
|
|
],
|
|
};
|