aurelia-karma.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. (function(global) {
  2. var karma = global.__karma__;
  3. var requirejs = global.requirejs
  4. var locationPathname = global.location.pathname;
  5. var root = 'src';
  6. karma.config.args.forEach(function(value, index) {
  7. if (value === 'aurelia-root') {
  8. root = karma.config.args[index + 1];
  9. }
  10. });
  11. if (!karma || !requirejs) {
  12. return;
  13. }
  14. function normalizePath(path) {
  15. var normalized = []
  16. var parts = path
  17. .split('?')[0] // cut off GET params, used by noext requirejs plugin
  18. .split('/')
  19. for (var i = 0; i < parts.length; i++) {
  20. if (parts[i] === '.') {
  21. continue
  22. }
  23. if (parts[i] === '..' && normalized.length && normalized[normalized.length - 1] !== '..') {
  24. normalized.pop()
  25. continue
  26. }
  27. normalized.push(parts[i])
  28. }
  29. return normalized.join('/')
  30. }
  31. function patchRequireJS(files, originalLoadFn, locationPathname) {
  32. var IS_DEBUG = /debug\.html$/.test(locationPathname)
  33. requirejs.load = function (context, moduleName, url) {
  34. url = normalizePath(url)
  35. if (files.hasOwnProperty(url) && !IS_DEBUG) {
  36. url = url + '?' + files[url]
  37. }
  38. if (url.indexOf('/base') !== 0) {
  39. url = '/base/' + url;
  40. }
  41. return originalLoadFn.call(this, context, moduleName, url)
  42. }
  43. var originalDefine = global.define;
  44. global.define = function(name, deps, m) {
  45. if (typeof name === 'string') {
  46. originalDefine('/base/' + root + '/' + name, [name], function (result) { return result; });
  47. }
  48. return originalDefine(name, deps, m);
  49. }
  50. }
  51. function requireTests() {
  52. var TEST_REGEXP = /(spec)\.js$/i;
  53. var allTestFiles = ['/base/test/unit/setup.js'];
  54. Object.keys(window.__karma__.files).forEach(function(file) {
  55. if (TEST_REGEXP.test(file)) {
  56. allTestFiles.push(file);
  57. }
  58. });
  59. require(allTestFiles, window.__karma__.start);
  60. }
  61. karma.loaded = function() {}; // make it async
  62. patchRequireJS(karma.files, requirejs.load, locationPathname);
  63. requireTests();
  64. })(window);