1
0
mirror of https://github.com/Jermolene/TiddlyWiki5 synced 2024-11-23 10:07:19 +00:00

Make test harness exit with a non-zero code when there's test failure (#4889)

* Rename variables to better convey what they're about

* Refactor comments so that they make more sense

* In Node.js, call the wrapper's execute function

The function sets up callbacks necessary for
exiting the process with the appropriate exit code.
https://github.com/jasmine/jasmine-npm/blob/v3.4.0/lib/jasmine.js#L235

* No need to configure the default reporter manually

The .execute() function does it

* Add note on which path comes from which npm package

* Note that other properties of the process object are referenced too
This commit is contained in:
ento 2020-10-18 06:19:52 -08:00 committed by GitHub
parent 41931082e6
commit dbda09b9fc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -16,6 +16,13 @@ var TEST_TIDDLER_FILTER = "[type[application/javascript]tag[$:/tags/test-spec]]"
/*
Startup function for running tests
Below, paths like jasmine-core/jasmine.js refer to files in the 'jasmine-core' npm
package, whose repository is https://github.com/jasmine/jasmine.
Paths like jasmine/jasmine.js refer to files in the 'jasmine' npm package, whose
repository is https://github.com/jasmine/jasmine-npm.
They're all locally checked into the `./files` directory.
*/
exports.startup = function() {
// Set up a shared context object.
@ -65,37 +72,52 @@ exports.startup = function() {
return context.module.exports || contextExports;
}
// Get the core Jasmine exports
// Get the core Jasmine exports.
// We load 'jasmine-core/jasmine.js' here in order to start with a module
// that is shared between browser and Node.js environments. Browser-specific
// and Node-specific modules are loaded next.
var jasmineCore = evalInContext("$:/plugins/tiddlywiki/jasmine/jasmine-core/jasmine-core/jasmine.js");
// Get the Jasmine instance and configure reporters
// The core Jasmine instance
var jasmine;
// Node.js wrapper for calling `.execute()`
var nodeJasmineWrapper;
if($tw.browser) {
window.jasmineRequire = jasmineCore;
$tw.modules.execute("$:/plugins/tiddlywiki/jasmine/jasmine-core/jasmine-core/jasmine-html.js");
$tw.modules.execute("$:/plugins/tiddlywiki/jasmine/jasmine-core/jasmine-core/boot.js");
jasmine = window.jasmine;
} else {
// We load 'jasmine-core/jasmine.js' above instead of the
// main script 'jasmine-core/jasmine-core.js', which is what's loaded
// when you run `require('jasmine-core')` in a Node.js environment.
// We load 'jasmine-core/jasmine.js' because we want to factor out
// code paths that are common between browser and Node.js environments.
// As a result, the `jasmineCore` object is missing some properties that
// 'jasmine/jasmine.js' expects, so we manually populate what we need.
// Add missing properties to `jasmineCore` in order to call the Jasmine
// constructor in Node.js.
//
// The constructor loads the `jasmineCore` object automatically, if
// not explicitly specified, by calling `require('jasmine-core')`.
// What happens internally next is...
//
// 1. require('jasmine-core')
// a. loads the package's main script, 'jasmine-core/jasmine-core.js'
// i. requires 'jasmine-core/jasmine.js'
// ii. reads some extra files and returns a `jasmineCore` object
//
// Because we're in TiddlyWiki land, we really don't need step 1.a.ii.
//
// Since the `jasmineCore` variable already holds the result of 1.a.i,
// we'll add a few properties necessary for calling the Jasmine constructor
// and pass it in explicitly. The consructor function can be seen here:
// https://github.com/jasmine/jasmine-npm/blob/v3.4.0/lib/jasmine.js#L10
// 'jasmine/jasmine.js' calls `.boot()`
// 'jasmine/jasmine.js' requires the `.boot()` function
jasmineCore.boot = evalInContext("$:/plugins/tiddlywiki/jasmine/jasmine-core/jasmine-core/node_boot.js");
// 'jasmine/jasmine.js' references `.files.path`
jasmineCore.files = {
path: "$:/plugins/tiddlywiki/jasmine/jasmine-core/jasmine-core"
};
// 'jasmine/jasmine.js' references `process.exit`
// 'jasmine/jasmine.js' references `process.exit`, among other properties
context.process = process;
var JasmineNode = evalInContext("$:/plugins/tiddlywiki/jasmine/jasmine/jasmine.js");
var jasmineRunner = new JasmineNode({jasmineCore: jasmineCore});
jasmineRunner.configureDefaultReporter({});
jasmine = jasmineRunner.jasmine;
var NodeJasmine = evalInContext("$:/plugins/tiddlywiki/jasmine/jasmine/jasmine.js");
nodeJasmineWrapper = new NodeJasmine({jasmineCore: jasmineCore});
jasmine = nodeJasmineWrapper.jasmine;
}
// Add Jasmine's DSL to our context
var env = jasmine.getEnv();
@ -109,7 +131,7 @@ exports.startup = function() {
// In a browser environment, jasmine-core/boot.js calls `execute()` for us.
// In Node.js, we call it manually.
if(!$tw.browser) {
env.execute();
nodeJasmineWrapper.execute();
}
};