karma.conf.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. const ci = !!process.env.CI;
  2. const watch = !!process.env.WATCH;
  3. const live = !!process.env.LIVE;
  4. const es5 = !!process.env.ES5;
  5. const ip = "bs-local.com";
  6. const browserstack = require("./browserstack-karma.js");
  7. // https://www.browserstack.com/open-source (text search "parallels")
  8. // Instead of the 5 available we only use 2, so two commits can run CI at the same time
  9. const BROWSERSTACK_OPEN_SOURCE_CONCURRENCY = 2;
  10. const getBrowserstackBrowsers = () =>
  11. Object.keys(browserstack).filter((k) => !!browserstack[k].es5 === es5);
  12. const browsers = ci
  13. ? getBrowserstackBrowsers()
  14. : live
  15. ? undefined
  16. : watch
  17. ? ["Chrome"]
  18. : ["ChromeHeadless", "FirefoxHeadless"];
  19. module.exports = function (config) {
  20. config.set({
  21. basePath: ".",
  22. frameworks: ["mocha", "karma-typescript"],
  23. // list of files / patterns to load in the browser
  24. files: process.env.FILES_PATTERN.split(",")
  25. .map((p) => ({ pattern: p }))
  26. .concat({ pattern: "src/**/*.ts" }),
  27. preprocessors: {
  28. "**/*.ts": "karma-typescript",
  29. "**/*.tsx": "karma-typescript",
  30. },
  31. plugins: [
  32. "karma-mocha",
  33. "karma-typescript",
  34. "karma-mocha-reporter",
  35. "karma-chrome-launcher",
  36. "karma-firefox-launcher",
  37. "karma-browserstack-launcher",
  38. ],
  39. hostname: ci ? ip : "localhost",
  40. karmaTypescriptConfig: {
  41. compilerOptions: {
  42. ...require("./tsconfig.json").compilerOptions,
  43. ...require("./test/tsconfig.json").compilerOptions,
  44. sourceMap: false,
  45. inlineSourceMap: true,
  46. target: es5 ? "es5" : "es6",
  47. },
  48. bundlerOptions: {
  49. sourceMap: true,
  50. },
  51. include: process.env.FILES_PATTERN.split(",").concat("src/**/*.ts"),
  52. },
  53. browserStack: {
  54. name: "Snabbdom",
  55. retryLimit: 1,
  56. },
  57. client: {
  58. captureConsole: true,
  59. },
  60. customLaunchers: browserstack,
  61. reporters: ["karma-typescript", "mocha", "BrowserStack"],
  62. mochaReporter: {
  63. showDiff: true,
  64. },
  65. port: 9876,
  66. colors: true,
  67. autoWatch: true,
  68. browsers: browsers,
  69. singleRun: !watch && !live,
  70. concurrency: ci ? BROWSERSTACK_OPEN_SOURCE_CONCURRENCY : Infinity,
  71. });
  72. };