karma.conf.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. var istanbul = require('browserify-istanbul');
  2. var isparta = require('isparta');
  3. module.exports = function(config) {
  4. // Only run chrome in no sandbox mode
  5. let customLaunchers = {};
  6. ['Chrome', 'ChromeCanary', 'Chromium'].forEach((browser) => {
  7. customLaunchers[browser + 'WithFlags'] = {
  8. base: browser,
  9. flags: ['--no-sandbox']
  10. };
  11. customLaunchers[browser + 'HeadlessWithFlags'] = {
  12. base: browser + 'Headless',
  13. flags: ['--no-sandbox']
  14. };
  15. });
  16. let detectBrowsers = {
  17. usePhantomJS: false,
  18. // use headless mode automatically for browsers that support it
  19. preferHeadless: true,
  20. // replace chrome headless with one that is suitable for automatic testing
  21. postDetection: function(availableBrowsers) {
  22. let browsers = [];
  23. for (let index in availableBrowsers) {
  24. let browser = availableBrowsers[index];
  25. if (/^(Chromium.*|Chrome.*)/.test(browser)) {
  26. browsers.push(browser + 'WithFlags');
  27. } else if (!/Safari/.test(browser)) {
  28. browsers.push(browser);
  29. }
  30. }
  31. return browsers;
  32. }
  33. };
  34. // If no browsers are specified, we enable `karma-detect-browsers`
  35. // this will detect all browsers that are available for testing
  36. if (!config.browsers.length) {
  37. detectBrowsers.enabled = true;
  38. }
  39. config.set({
  40. basePath: '..',
  41. frameworks: ['qunit', 'browserify', 'detectBrowsers'],
  42. client: {
  43. clearContext: false,
  44. qunit: {
  45. showUI: true,
  46. testTimeout: 30000
  47. }
  48. },
  49. files: [
  50. 'node_modules/sinon/pkg/sinon.js',
  51. 'node_modules/sinon/pkg/sinon-ie.js',
  52. 'node_modules/video.js/dist/video.js',
  53. 'node_modules/video.js/dist/video-js.css',
  54. 'node_modules/videojs-flash/dist/videojs-flash.js',
  55. 'dist-test/browserify-test.js',
  56. 'dist-test/webpack-test.js',
  57. 'dist-test/videojs-contrib-hls.js'
  58. ],
  59. browserConsoleLogOptions: {
  60. level: 'error',
  61. terminal: false
  62. },
  63. preprocessors: {
  64. 'test/**/*.test.js': ['browserify']
  65. },
  66. browserify: {
  67. debug: true,
  68. transform: [
  69. 'babelify',
  70. ['browserify-shim', { global: true }]
  71. ],
  72. noParse: [
  73. 'test/data/**',
  74. ]
  75. },
  76. babelPreprocessor: {
  77. options: {
  78. presets: ['es2015'],
  79. sourceMap: 'inline'
  80. },
  81. sourceFileName: function (file) {
  82. return file.originalPath;
  83. }
  84. },
  85. customLaunchers,
  86. detectBrowsers: detectBrowsers,
  87. reporters: ['dots'],
  88. port: 9876,
  89. colors: true,
  90. autoWatch: false,
  91. singleRun: true,
  92. concurrency: 1,
  93. captureTimeout: 300000,
  94. browserNoActivityTimeout: 300000,
  95. browserDisconnectTimeout: 300000,
  96. browserDisconnectTolerance: 3
  97. });
  98. // Coverage reporting
  99. // Coverage is enabled by passing the flag --coverage to npm test
  100. var coverageFlag = process.env.npm_config_coverage;
  101. var reportCoverage = process.env.TRAVIS || coverageFlag;
  102. if (reportCoverage) {
  103. config.reporters.push('coverage');
  104. config.browserify.transform.push(istanbul({
  105. instrumenter: isparta,
  106. ignore: ['**/node_modules/**', '**/test/**']
  107. }));
  108. config.preprocessors['src/**/*.js'] = ['browserify', 'coverage'];
  109. }
  110. };