From 578a99ccf0692d32c711fe2aea7d34caf007bd4e Mon Sep 17 00:00:00 2001 From: Tobias Bieniek Date: Mon, 10 Dec 2018 18:10:17 +0100 Subject: [PATCH 1/5] test-loader: Move `TestLoader` class into `addon-test-support` ... and remove the old `ember-cli/test-loader` fallback --- addon-test-support/ember-mocha/index.js | 2 ++ addon-test-support/ember-mocha/test-loader.js | 32 +++++++++++++++++++ vendor/ember-mocha/test-loader.js | 23 ++----------- 3 files changed, 37 insertions(+), 20 deletions(-) create mode 100644 addon-test-support/ember-mocha/test-loader.js diff --git a/addon-test-support/ember-mocha/index.js b/addon-test-support/ember-mocha/index.js index 5630d866..8c94a1bf 100644 --- a/addon-test-support/ember-mocha/index.js +++ b/addon-test-support/ember-mocha/index.js @@ -1,3 +1,5 @@ +export { loadTests } from './test-loader'; + import describeModule from 'ember-mocha/describe-module'; import describeComponent from 'ember-mocha/describe-component'; import describeModel from 'ember-mocha/describe-model'; diff --git a/addon-test-support/ember-mocha/test-loader.js b/addon-test-support/ember-mocha/test-loader.js new file mode 100644 index 00000000..658cca0a --- /dev/null +++ b/addon-test-support/ember-mocha/test-loader.js @@ -0,0 +1,32 @@ +import { describe, it } from 'mocha'; +import AbstractTestLoader, { + addModuleIncludeMatcher, +} from 'ember-cli-test-loader/test-support/index'; + +addModuleIncludeMatcher(function(moduleName) { + return moduleName.match(/\.jshint$/); +}); + +export class TestLoader extends AbstractTestLoader { + shouldLoadModule(moduleName) { + return moduleName.match(/[-_]test$/) || moduleName.match(/\.jshint$/); + } + + moduleLoadFailure(moduleName, error) { + describe('TestLoader Failures', function() { + it(moduleName + ': could not be loaded', function() { + throw error; + }); + }); + } +} + +/** + * Load tests following the default patterns: + * + * - The module name ends with `-test` or `_test` + * - The module name ends with `.jshint` + */ +export function loadTests() { + new TestLoader().loadModules(); +} diff --git a/vendor/ember-mocha/test-loader.js b/vendor/ember-mocha/test-loader.js index 61057b90..49bab691 100644 --- a/vendor/ember-mocha/test-loader.js +++ b/vendor/ember-mocha/test-loader.js @@ -1,4 +1,4 @@ -/* globals mocha, require, requirejs */ +/* globals mocha, require */ (function() { function ready(fn) { @@ -10,30 +10,13 @@ } ready(function() { - var testLoaderModulePath = 'ember-cli-test-loader/test-support/index'; - - if (!requirejs.entries[testLoaderModulePath]) { - testLoaderModulePath = 'ember-cli/test-loader'; - } - - var TestLoader = require(testLoaderModulePath)['default']; - TestLoader.prototype.shouldLoadModule = function(moduleName) { - return moduleName.match(/[-_]test$/) || moduleName.match(/\.jshint$/); - }; - - TestLoader.prototype.moduleLoadFailure = function(moduleName, error) { - describe('TestLoader Failures', function() { - it(moduleName + ': could not be loaded', function() { - throw error; - }); - }); - }; + var loadTests = require('ember-mocha')['loadTests']; // Attempt to mitigate sourcemap issues in Chrome // See: https://github.com/ember-cli/ember-cli/issues/3098 // https://github.com/ember-cli/ember-cli-qunit/pull/39 setTimeout(function() { - TestLoader.load(); + loadTests(); mocha.run(); }, 250); From 59237769b6194be2e0f2d87d4959dd187a83d295 Mon Sep 17 00:00:00 2001 From: Tobias Bieniek Date: Mon, 10 Dec 2018 18:25:47 +0100 Subject: [PATCH 2/5] Extract `startTests()` function --- addon-test-support/ember-mocha/index.js | 9 +++++++++ vendor/ember-mocha/test-loader.js | 9 +++++---- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/addon-test-support/ember-mocha/index.js b/addon-test-support/ember-mocha/index.js index 8c94a1bf..dc1e2d9a 100644 --- a/addon-test-support/ember-mocha/index.js +++ b/addon-test-support/ember-mocha/index.js @@ -1,3 +1,5 @@ +/* globals mocha */ + export { loadTests } from './test-loader'; import describeModule from 'ember-mocha/describe-module'; @@ -30,6 +32,13 @@ function setupTest(moduleName) { return setupTestNew(...arguments); } +/** + * Instruct Mocha to start the tests. + */ +export function startTests() { + mocha.run(); +} + export { describeModule, describeComponent, diff --git a/vendor/ember-mocha/test-loader.js b/vendor/ember-mocha/test-loader.js index 49bab691..4e528612 100644 --- a/vendor/ember-mocha/test-loader.js +++ b/vendor/ember-mocha/test-loader.js @@ -1,4 +1,4 @@ -/* globals mocha, require */ +/* globals require */ (function() { function ready(fn) { @@ -10,15 +10,16 @@ } ready(function() { - var loadTests = require('ember-mocha')['loadTests']; + var emberMocha = require('ember-mocha'); + var loadTests = emberMocha['loadTests']; + var startTests = emberMocha['startTests']; // Attempt to mitigate sourcemap issues in Chrome // See: https://github.com/ember-cli/ember-cli/issues/3098 // https://github.com/ember-cli/ember-cli-qunit/pull/39 setTimeout(function() { loadTests(); - - mocha.run(); + startTests(); }, 250); }); })(); From 42d1b453246eea8fdf3fa7ffdb9d2216f26503e7 Mon Sep 17 00:00:00 2001 From: Tobias Bieniek Date: Mon, 10 Dec 2018 18:29:38 +0100 Subject: [PATCH 3/5] Extract `start()` function --- addon-test-support/ember-mocha/index.js | 19 +++++++++++++++++++ vendor/ember-mocha/test-loader.js | 7 ++----- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/addon-test-support/ember-mocha/index.js b/addon-test-support/ember-mocha/index.js index dc1e2d9a..cbac84cf 100644 --- a/addon-test-support/ember-mocha/index.js +++ b/addon-test-support/ember-mocha/index.js @@ -2,6 +2,7 @@ export { loadTests } from './test-loader'; +import { loadTests } from './test-loader'; import describeModule from 'ember-mocha/describe-module'; import describeComponent from 'ember-mocha/describe-component'; import describeModel from 'ember-mocha/describe-model'; @@ -39,6 +40,24 @@ export function startTests() { mocha.run(); } + +/** + * @method start + * @param {Object} [options] Options to be used for enabling/disabling behaviors + * @param {Boolean} [options.loadTests] If `false` tests will not be loaded automatically. + * @param {Boolean} [options.startTests] If `false` tests will not be automatically started + * (you must run `startTests()` to kick them off). + */ +export function start(options = {}) { + if (options.loadTests !== false) { + loadTests(); + } + + if (options.startTests !== false) { + startTests(); + } +} + export { describeModule, describeComponent, diff --git a/vendor/ember-mocha/test-loader.js b/vendor/ember-mocha/test-loader.js index 4e528612..09f944e0 100644 --- a/vendor/ember-mocha/test-loader.js +++ b/vendor/ember-mocha/test-loader.js @@ -10,16 +10,13 @@ } ready(function() { - var emberMocha = require('ember-mocha'); - var loadTests = emberMocha['loadTests']; - var startTests = emberMocha['startTests']; + var start = require('ember-mocha')['start']; // Attempt to mitigate sourcemap issues in Chrome // See: https://github.com/ember-cli/ember-cli/issues/3098 // https://github.com/ember-cli/ember-cli-qunit/pull/39 setTimeout(function() { - loadTests(); - startTests(); + start(); }, 250); }); })(); From be7732e222e41ac1496d3d5685ebab8a13c96af8 Mon Sep 17 00:00:00 2001 From: Tobias Bieniek Date: Mon, 10 Dec 2018 18:31:22 +0100 Subject: [PATCH 4/5] Replace automatic test start via timeout with explicit `start()` call --- .../ember-mocha/files/tests/test-helper.js | 3 +++ index.js | 1 - tests/test-helper.js | 4 +++- vendor/ember-mocha/test-loader.js | 22 ------------------- 4 files changed, 6 insertions(+), 24 deletions(-) delete mode 100644 vendor/ember-mocha/test-loader.js diff --git a/blueprints/ember-mocha/files/tests/test-helper.js b/blueprints/ember-mocha/files/tests/test-helper.js index b366f7b9..ac1baae7 100644 --- a/blueprints/ember-mocha/files/tests/test-helper.js +++ b/blueprints/ember-mocha/files/tests/test-helper.js @@ -1,5 +1,8 @@ import Application from '../app'; import config from '../config/environment'; import { setApplication } from '@ember/test-helpers'; +import { start } from 'ember-mocha'; setApplication(Application.create(config.APP)); + +start(); diff --git a/index.js b/index.js index 73a79e04..fdf19f09 100644 --- a/index.js +++ b/index.js @@ -38,7 +38,6 @@ module.exports = { this.import('vendor/mocha/mocha.css', { type: 'test' }); this.import('vendor/ember-mocha/mocha-configuration.js', { type: 'test' }); this.import('vendor/ember-mocha/ember-mocha-adapter.js', { type: 'test' }); - this.import('vendor/ember-mocha/test-loader.js', { type: 'test' }); let addonOptions = this.targetOptions(); let explicitlyDisabledStyles = addonOptions.disableContainerStyles === true; diff --git a/tests/test-helper.js b/tests/test-helper.js index 775dc6a9..186f886c 100644 --- a/tests/test-helper.js +++ b/tests/test-helper.js @@ -1,4 +1,6 @@ -import { setResolver } from 'ember-mocha'; +import { setResolver, start } from 'ember-mocha'; import resolver from './helpers/resolver'; setResolver(resolver); + +start(); diff --git a/vendor/ember-mocha/test-loader.js b/vendor/ember-mocha/test-loader.js deleted file mode 100644 index 09f944e0..00000000 --- a/vendor/ember-mocha/test-loader.js +++ /dev/null @@ -1,22 +0,0 @@ -/* globals require */ -(function() { - - function ready(fn) { - if (document.readyState !== 'loading') { - fn(); - } else { - document.addEventListener('DOMContentLoaded', fn); - } - } - - ready(function() { - var start = require('ember-mocha')['start']; - - // Attempt to mitigate sourcemap issues in Chrome - // See: https://github.com/ember-cli/ember-cli/issues/3098 - // https://github.com/ember-cli/ember-cli-qunit/pull/39 - setTimeout(function() { - start(); - }, 250); - }); -})(); From 4475c6e9f2328507038231033b3ba4bf87c25651 Mon Sep 17 00:00:00 2001 From: Tobias Bieniek Date: Mon, 10 Dec 2018 19:27:48 +0100 Subject: [PATCH 5/5] test-loader: Exclude modules starting with `ember-mocha/` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ... so that we can use files ending in `-test` in our own code 🙈 --- addon-test-support/ember-mocha/test-loader.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/addon-test-support/ember-mocha/test-loader.js b/addon-test-support/ember-mocha/test-loader.js index 658cca0a..35aabb49 100644 --- a/addon-test-support/ember-mocha/test-loader.js +++ b/addon-test-support/ember-mocha/test-loader.js @@ -9,7 +9,8 @@ addModuleIncludeMatcher(function(moduleName) { export class TestLoader extends AbstractTestLoader { shouldLoadModule(moduleName) { - return moduleName.match(/[-_]test$/) || moduleName.match(/\.jshint$/); + return !moduleName.match(/^ember-mocha\//) + && (moduleName.match(/[-_]test$/) || moduleName.match(/\.jshint$/)); } moduleLoadFailure(moduleName, error) {