Skip to content

Commit

Permalink
test support for #3091
Browse files Browse the repository at this point in the history
- this will assert that using `import` with `mocha.js` does not break
- fix: remove missing `Makefile` target; add `test-browser-esm` target
- fix: update invalid comments regarding running SauceLabs locally in
  `karma.conf`
- fix: break if attempting to run Karma on AppVeyor
- refactor Karma test flags to all use `MOCHA_TEST` env var
- a few reformats

Signed-off-by: Christopher Hiller <boneskull@boneskull.com>
  • Loading branch information
boneskull committed Dec 12, 2017
1 parent 03c866c commit add3281
Show file tree
Hide file tree
Showing 4 changed files with 89 additions and 51 deletions.
16 changes: 10 additions & 6 deletions Makefile
Expand Up @@ -5,10 +5,10 @@ NYC := "node_modules/.bin/nyc"

ifdef COVERAGE
define test_node
$(NYC) --no-clean --report-dir coverage/reports/$(1) $(MOCHA)
$(NYC) --no-clean --report-dir coverage/reports/$(1) $(MOCHA)
endef
else
test_node := $(MOCHA)
test_node := $(MOCHA)
endif

TM_BUNDLE = JavaScript\ mocha.tmbundle
Expand All @@ -32,7 +32,7 @@ lint:

test-node: test-bdd test-tdd test-qunit test-exports test-unit test-integration test-jsapi test-compilers test-requires test-reporters test-only test-global-only

test-browser: clean mocha.js test-browser-unit test-browser-bdd test-browser-qunit test-browser-tdd test-browser-exports
test-browser: clean mocha.js test-browser-unit test-browser-bdd test-browser-qunit test-browser-tdd test-browser-esm

test: lint test-node test-browser

Expand All @@ -42,15 +42,19 @@ test-browser-unit:

test-browser-bdd:
@printf "==> [Test :: Browser :: BDD]\n"
MOCHA_UI=bdd $(MAKE) test-browser-unit
MOCHA_TEST=bdd $(MAKE) test-browser-unit

test-browser-qunit:
@printf "==> [Test :: Browser :: QUnit]\n"
MOCHA_UI=qunit $(MAKE) test-browser-unit
MOCHA_TEST=qunit $(MAKE) test-browser-unit

test-browser-tdd:
@printf "==> [Test :: Browser :: TDD]\n"
MOCHA_UI=tdd $(MAKE) test-browser-unit
MOCHA_TEST=tdd $(MAKE) test-browser-unit

test-browser-esm:
@printf "==> [Test :: Browser :: ESM]\n"
MOCHA_TEST=esm $(MAKE) test-browser-unit

test-jsapi:
@printf "==> [Test :: JS API]\n"
Expand Down
112 changes: 67 additions & 45 deletions karma.conf.js
Expand Up @@ -35,20 +35,24 @@ module.exports = function (config) {
preprocessors: {
'test/**/*.js': ['browserify']
},
browserify: Object.assign({insertGlobalVars: bundlerOptions.insertGlobalVars},
{
debug: true,
configure: function configure (b) {
build(b)
.on('bundled', function (err, content) {
if (!err && bundleDirpath) {
// write bundle to directory for debugging
fs.writeFileSync(path.join(bundleDirpath, 'bundle.' +
Date.now() + '.js'), content);
}
});
}
}),
browserify: Object.assign({
insertGlobalVars: bundlerOptions.insertGlobalVars
}, {
debug: true,
configure: function configure (b) {
build(b)
.on('bundled', function (err, content) {
if (err) {
throw err;
}
if (bundleDirpath) {
// write bundle to directory for debugging
fs.writeFileSync(path.join(bundleDirpath, 'mocha.' + Date.now() +
'.js'), content);
}
});
}
}),
reporters: ['mocha'],
colors: true,
browsers: ['PhantomJS'],
Expand All @@ -63,18 +67,8 @@ module.exports = function (config) {
}
};

// see https://github.com/saucelabs/karma-sauce-example

// We define the browser to run on the Saucelabs Infrastructure
// via the environment variables BROWSER and PLATFORM.
// PLATFORM is e.g. "Windows"
// BROWSER is expected to be in the format "<name>@<version>",
// e.g. "MicrosoftEdge@latest"
// See https://wiki.saucelabs.com/display/DOCS/Platform+Configurator#/
// for available browsers.

// TO RUN LOCALLY, execute:
// `CI=1 SAUCE_USERNAME=<user> SAUCE_ACCESS_KEY=<key> BROWSER=<browser> PLATFORM=<platform> make test-browser`
// TO RUN AGAINST SAUCELABS LOCALLY, execute:
// `CI=1 SAUCE_USERNAME=<user> SAUCE_ACCESS_KEY=<key> make test-browser`
var env = process.env;
var sauceConfig;

Expand All @@ -86,8 +80,8 @@ module.exports = function (config) {
if (env.SAUCE_USERNAME && env.SAUCE_ACCESS_KEY) {
// correlate build/tunnel with Travis
sauceConfig = {
build: 'TRAVIS #' + env.TRAVIS_BUILD_NUMBER +
' (' + env.TRAVIS_BUILD_ID + ')',
build: 'TRAVIS #' + env.TRAVIS_BUILD_NUMBER + ' (' +
env.TRAVIS_BUILD_ID + ')',
tunnelIdentifier: env.TRAVIS_JOB_NUMBER,
startConnect: false
};
Expand All @@ -96,8 +90,7 @@ module.exports = function (config) {
console.error('No SauceLabs credentials present');
}
} else if (env.APPVEYOR) {
console.error('AppVeyor detected');
bundleDirpath = path.join(baseBundleDirpath, process.env.APPVEYOR_BUILD_ID);
throw new Error('no browser tests should run on AppVeyor!');
} else {
console.error('Local/unknown environment detected');
bundleDirpath = path.join(baseBundleDirpath, 'local');
Expand All @@ -124,21 +117,50 @@ module.exports = function (config) {
addSauceTests(cfg);
}

// the MOCHA_UI env var will determine if we're running interface-specific
// tests. since you can only load one at a time, each must be run separately.
// each has its own set of acceptance tests and a fixture.
// the "bdd" fixture is used by default.
var ui = env.MOCHA_UI;
if (ui) {
if (cfg.sauceLabs) {
cfg.sauceLabs.testName = 'Interface "' + ui + '" integration tests';
}
cfg.files = [
'test/browser-fixtures/' + ui + '.fixture.js',
'test/interfaces/' + ui + '.spec.js'
];
} else if (cfg.sauceLabs) {
cfg.sauceLabs.testName = 'Unit Tests';
/* the MOCHA_TEST env var will be set for "special" cases of tests.
* these may require different interfaces or other setup which make
* them unable to be batched w/ the rest.
*/
var MOCHA_TEST = env.MOCHA_TEST;
switch (MOCHA_TEST) {
case 'bdd':
case 'tdd':
case 'qunit':
if (cfg.sauceLabs) {
cfg.sauceLabs.testName =
'Interface "' + MOCHA_TEST + '" Integration Tests';
}
cfg.files = [
'test/browser-fixtures/' + MOCHA_TEST + '.fixture.js',
'test/interfaces/' + MOCHA_TEST + '.spec.js'
];
break;

case 'esm':
// for now we will only run against Chrome to test this.
if (cfg.sauceLabs) {
cfg.sauceLabs.testName = 'ESM Integration Tests';
cfg.browsers = ['chrome@latest'];
var launcher = cfg.customLaunchers['chrome@latest'];
cfg.customLaunchers = {
'chrome@latest': launcher
};
} else if (!env.TRAVIS) {
cfg.browsers = ['Chrome'];
} else {
console.error(
'skipping ESM tests & exiting; no SauceLabs nor local run detected');
process.exit(0);
}
cfg.files = [
'test/browser-fixtures/esm.fixture.html',
'test/browser-specific/esm.spec.js'
];
break;
default:
if (cfg.sauceLabs) {
cfg.sauceLabs.testName = 'Unit Tests';
}
}

config.set(cfg);
Expand Down
7 changes: 7 additions & 0 deletions test/browser-fixtures/esm.fixture.html
@@ -0,0 +1,7 @@
<script>
delete window.require;
</script>
<script type="module">
import '/base/mocha.js';
window.MOCHA_IS_OK = true;
</script>
5 changes: 5 additions & 0 deletions test/browser-specific/esm.spec.js
@@ -0,0 +1,5 @@
'use strict';

it('should register a global if it did not fail', function () {
expect(window.MOCHA_IS_OK).to.be.ok();
});

0 comments on commit add3281

Please sign in to comment.