mirror of
https://github.com/Jermolene/TiddlyWiki5
synced 2024-12-24 00:50:28 +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:
parent
41931082e6
commit
dbda09b9fc
@ -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();
|
||||
}
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user