web-test-runner.config.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. /**
  2. * @license
  3. * Copyright 2021 Google LLC
  4. * SPDX-License-Identifier: BSD-3-Clause
  5. */
  6. import {legacyPlugin} from '@web/dev-server-legacy';
  7. import {playwrightLauncher} from '@web/test-runner-playwright';
  8. // Uncomment for testing on Sauce Labs
  9. // Must run `npm i --save-dev @web/test-runner-saucelabs` and set
  10. // SAUCE_USERNAME and SAUCE_USERNAME environment variables
  11. // ===========
  12. // import {createSauceLabsLauncher} from '@web/test-runner-saucelabs';
  13. // const sauceLabsLauncher = createSauceLabsLauncher(
  14. // {
  15. // user: process.env.SAUCE_USERNAME,
  16. // key: process.env.SAUCE_USERNAME,
  17. // },
  18. // {
  19. // 'sauce:options': {
  20. // name: 'unit tests',
  21. // build: `${process.env.GITHUB_REF ?? 'local'} build ${
  22. // process.env.GITHUB_RUN_NUMBER ?? ''
  23. // }`,
  24. // },
  25. // }
  26. // );
  27. // Uncomment for testing on BrowserStack
  28. // Must run `npm i --save-dev @web/test-runner-browserstack` and set
  29. // BROWSER_STACK_USERNAME and BROWSER_STACK_ACCESS_KEY environment variables
  30. // ===========
  31. // import {browserstackLauncher as createBrowserstackLauncher} from '@web/test-runner-browserstack';
  32. // const browserstackLauncher = (config) => createBrowserstackLauncher({
  33. // capabilities: {
  34. // 'browserstack.user': process.env.BROWSER_STACK_USERNAME,
  35. // 'browserstack.key': process.env.BROWSER_STACK_ACCESS_KEY,
  36. // project: 'todo-lit',
  37. // name: 'unit tests',
  38. // build: `${process.env.GITHUB_REF ?? 'local'} build ${
  39. // process.env.GITHUB_RUN_NUMBER ?? ''
  40. // }`,
  41. // ...config,
  42. // }
  43. // });
  44. const browsers = {
  45. // Local browser testing via playwright
  46. // ===========
  47. chromium: playwrightLauncher({product: 'chromium'}),
  48. firefox: playwrightLauncher({product: 'firefox'}),
  49. webkit: playwrightLauncher({product: 'webkit'}),
  50. // Uncomment example launchers for running on Sauce Labs
  51. // ===========
  52. // chromium: sauceLabsLauncher({browserName: 'chrome', browserVersion: 'latest', platformName: 'Windows 10'}),
  53. // firefox: sauceLabsLauncher({browserName: 'firefox', browserVersion: 'latest', platformName: 'Windows 10'}),
  54. // edge: sauceLabsLauncher({browserName: 'MicrosoftEdge', browserVersion: 'latest', platformName: 'Windows 10'}),
  55. // ie11: sauceLabsLauncher({browserName: 'internet explorer', browserVersion: '11.0', platformName: 'Windows 10'}),
  56. // safari: sauceLabsLauncher({browserName: 'safari', browserVersion: 'latest', platformName: 'macOS 10.15'}),
  57. // Uncomment example launchers for running on Sauce Labs
  58. // ===========
  59. // chromium: browserstackLauncher({browserName: 'Chrome', os: 'Windows', os_version: '10'}),
  60. // firefox: browserstackLauncher({browserName: 'Firefox', os: 'Windows', os_version: '10'}),
  61. // edge: browserstackLauncher({browserName: 'MicrosoftEdge', os: 'Windows', os_version: '10'}),
  62. // ie11: browserstackLauncher({browserName: 'IE', browser_version: '11.0', os: 'Windows', os_version: '10'}),
  63. // safari: browserstackLauncher({browserName: 'Safari', browser_version: '14.0', os: 'OS X', os_version: 'Big Sur'}),
  64. };
  65. // Prepend BROWSERS=x,y to `npm run test` to run a subset of browsers
  66. // e.g. `BROWSERS=chromium,firefox npm run test`
  67. const noBrowser = (b) => {
  68. throw new Error(`No browser configured named '${b}'; using defaults`);
  69. };
  70. let commandLineBrowsers;
  71. try {
  72. commandLineBrowsers = process.env.BROWSERS?.split(',').map(
  73. (b) => browsers[b] ?? noBrowser(b)
  74. );
  75. } catch (e) {
  76. console.warn(e);
  77. }
  78. // https://modern-web.dev/docs/test-runner/cli-and-configuration/
  79. export default {
  80. rootDir: '.',
  81. files: ['./test/**/*_test.js'],
  82. nodeResolve: true,
  83. preserveSymlinks: true,
  84. browsers: commandLineBrowsers ?? Object.values(browsers),
  85. testFramework: {
  86. // https://mochajs.org/api/mocha
  87. config: {
  88. ui: 'tdd',
  89. },
  90. },
  91. plugins: [
  92. // Detect browsers without modules (e.g. IE11) and transform to SystemJS
  93. // (https://modern-web.dev/docs/dev-server/plugins/legacy/).
  94. legacyPlugin({
  95. polyfills: {
  96. webcomponents: true,
  97. // Inject lit's polyfill-support module into test files, which is required
  98. // for interfacing with the webcomponents polyfills
  99. custom: [
  100. {
  101. name: 'lit-polyfill-support',
  102. path: 'node_modules/lit/polyfill-support.js',
  103. test:
  104. "!('attachShadow' in Element.prototype) || !('getRootNode' in Element.prototype) || window.ShadyDOM && window.ShadyDOM.force",
  105. module: false,
  106. },
  107. ],
  108. },
  109. }),
  110. ],
  111. };