karma.conf.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. const path = require('path')
  2. module.exports = function(config) {
  3. config.set({
  4. customLaunchers: {
  5. ChromeCustom: {
  6. base: 'ChromeHeadless',
  7. // We must disable the Chrome sandbox when running Chrome inside Docker
  8. // (Chrome's sandbox needs more permissions than Docker allows by
  9. // default)
  10. flags: ['--no-sandbox']
  11. }
  12. },
  13. browsers: ['ChromeCustom'],
  14. files: [
  15. 'test/unit_frontend/es/es-bootstrap.js',
  16. // Angular must be loaded before requirejs to set up angular global
  17. 'public/js/libs/angular-1.6.4.min.js',
  18. 'public/js/libs/angular-mocks.js',
  19. 'public/js/libs/jquery-1.11.1.min.js',
  20. 'public/js/libs/underscore-1.3.3.js',
  21. // Set up requirejs
  22. 'test/unit_frontend/js/test-main.js',
  23. // Include source & test files, but don't "include" them as requirejs
  24. // handles this for us
  25. { pattern: 'public/js/**/*.js', included: false },
  26. { pattern: 'test/unit_frontend/js/**/*.js', included: false },
  27. // Include ES test files
  28. 'test/unit_frontend/es/**/*.js',
  29. 'modules/**/test/unit_frontend/es/**/*.js',
  30. // Include CSS (there is some in js/libs dir)
  31. 'public/stylesheets/**/*.css',
  32. 'public/js/libs/**/*.css'
  33. ],
  34. middleware: ['fake-img'],
  35. preprocessors: {
  36. // Run ES test files through webpack (which will then include source
  37. // files in bundle)
  38. 'test/unit_frontend/es/**/*.js': ['webpack'],
  39. 'modules/**/test/unit_frontend/es/**/*.js': ['webpack']
  40. },
  41. frameworks: ['requirejs', 'mocha', 'chai-sinon'],
  42. // Configure webpack in the tests
  43. webpack: {
  44. module: {
  45. rules: [
  46. {
  47. // Pass application JS files through babel-loader, compiling to ES5
  48. test: /\.js$/,
  49. // Only compile application files (dependencies are in ES5 already)
  50. exclude: /node_modules/,
  51. use: [
  52. {
  53. loader: 'babel-loader',
  54. options: {
  55. // Configure babel-loader to cache compiled output so that
  56. // subsequent compile runs are much faster
  57. cacheDirectory: true
  58. }
  59. }
  60. ]
  61. }
  62. ]
  63. },
  64. resolve: {
  65. // Alias common directories in import pathnames to cut down on the
  66. // amount of ../../ etc
  67. alias: {
  68. Src: path.join(__dirname, 'public/es/'),
  69. Modules: path.join(__dirname, 'modules')
  70. }
  71. }
  72. },
  73. // Configure the webpack dev server used to serve test files
  74. webpackMiddleware: {
  75. // Disable noisy CLI output
  76. stats: 'errors-only'
  77. },
  78. plugins: [
  79. require('karma-chrome-launcher'),
  80. require('karma-requirejs'),
  81. require('karma-mocha'),
  82. require('karma-chai-sinon'),
  83. require('karma-webpack'),
  84. require('karma-mocha-reporter'),
  85. { 'middleware:fake-img': ['factory', fakeImgMiddlewareFactory] }
  86. ],
  87. reporters: ['mocha']
  88. })
  89. }
  90. /**
  91. * Handle fake images
  92. */
  93. function fakeImgMiddlewareFactory() {
  94. return function(req, res, next) {
  95. if (req.originalUrl.startsWith('/fake/')) {
  96. return res.end('fake img response')
  97. }
  98. next()
  99. }
  100. }