ember-qunit
Version: 
QUnit helpers for testing Ember.js applications
94 lines (87 loc) • 2.25 kB
JavaScript
import * as QUnit from 'qunit';
/* globals requirejs, require */
class TestLoader {
  static load() {
    new TestLoader().loadModules();
  }
  constructor() {
    this._didLogMissingUnsee = false;
  }
  shouldLoadModule(moduleName) {
    return moduleName.match(/[-_]test$/);
  }
  listModules() {
    return Object.keys(requirejs.entries);
  }
  listTestModules() {
    let moduleNames = this.listModules();
    let testModules = [];
    let moduleName;
    for (let i = 0; i < moduleNames.length; i++) {
      moduleName = moduleNames[i];
      if (this.shouldLoadModule(moduleName)) {
        testModules.push(moduleName);
      }
    }
    return testModules;
  }
  loadModules() {
    let testModules = this.listTestModules();
    let testModule;
    for (let i = 0; i < testModules.length; i++) {
      testModule = testModules[i];
      this.require(testModule);
      this.unsee(testModule);
    }
  }
  require(moduleName) {
    try {
      require(moduleName);
    } catch (e) {
      this.moduleLoadFailure(moduleName, e);
    }
  }
  unsee(moduleName) {
    if (typeof require.unsee === 'function') {
      require.unsee(moduleName);
    } else if (!this._didLogMissingUnsee) {
      this._didLogMissingUnsee = true;
      if (typeof console !== 'undefined') {
        console.warn('unable to require.unsee, please upgrade loader.js to >= v3.3.0');
      }
    }
  }
  moduleLoadFailure(moduleName, error) {
    moduleLoadFailures.push(error);
    QUnit.module('TestLoader Failures');
    QUnit.test(moduleName + ': could not be loaded', function () {
      throw error;
    });
  }
}
let moduleLoadFailures = [];
QUnit.done(function () {
  let length = moduleLoadFailures.length;
  try {
    if (length === 0) {
      // do nothing
    } else if (length === 1) {
      throw moduleLoadFailures[0];
    } else {
      throw new Error('\n' + moduleLoadFailures.join('\n'));
    }
  } finally {
    // ensure we release previously captured errors.
    moduleLoadFailures = [];
  }
});
/**
   Load tests following the default patterns:
   * The module name ends with `-test`
   @method loadTests
 */
function loadTests() {
  new TestLoader().loadModules();
}
export { TestLoader, loadTests };
//# sourceMappingURL=test-loader.js.map