Calculate total suite run time inside the env and report in jasmineDone
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -12,6 +12,7 @@ site/
|
|||||||
tags
|
tags
|
||||||
Gemfile.lock
|
Gemfile.lock
|
||||||
package-lock.json
|
package-lock.json
|
||||||
|
yarn.lock
|
||||||
pkg/*
|
pkg/*
|
||||||
.sass-cache/*
|
.sass-cache/*
|
||||||
src/html/.sass-cache/*
|
src/html/.sass-cache/*
|
||||||
|
|||||||
@@ -1495,6 +1495,9 @@ getJasmineRequireObj().Env = function(j$) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var jasmineTimer = new j$.Timer();
|
||||||
|
jasmineTimer.start();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Information passed to the {@link Reporter#jasmineStarted} event.
|
* Information passed to the {@link Reporter#jasmineStarted} event.
|
||||||
* @typedef JasmineStartedInfo
|
* @typedef JasmineStartedInfo
|
||||||
@@ -1530,6 +1533,7 @@ getJasmineRequireObj().Env = function(j$) {
|
|||||||
* Information passed to the {@link Reporter#jasmineDone} event.
|
* Information passed to the {@link Reporter#jasmineDone} event.
|
||||||
* @typedef JasmineDoneInfo
|
* @typedef JasmineDoneInfo
|
||||||
* @property {OverallStatus} overallStatus - The overall result of the suite: 'passed', 'failed', or 'incomplete'.
|
* @property {OverallStatus} overallStatus - The overall result of the suite: 'passed', 'failed', or 'incomplete'.
|
||||||
|
* @property {Int} totalTime - The total time (in ms) that it took to execute the suite
|
||||||
* @property {IncompleteReason} incompleteReason - Explanation of why the suite was incomplete.
|
* @property {IncompleteReason} incompleteReason - Explanation of why the suite was incomplete.
|
||||||
* @property {Order} order - Information about the ordering (random or not) of this execution of the suite.
|
* @property {Order} order - Information about the ordering (random or not) of this execution of the suite.
|
||||||
* @property {Expectation[]} failedExpectations - List of expectations that failed in an {@link afterAll} at the global level.
|
* @property {Expectation[]} failedExpectations - List of expectations that failed in an {@link afterAll} at the global level.
|
||||||
@@ -1538,6 +1542,7 @@ getJasmineRequireObj().Env = function(j$) {
|
|||||||
reporter.jasmineDone(
|
reporter.jasmineDone(
|
||||||
{
|
{
|
||||||
overallStatus: overallStatus,
|
overallStatus: overallStatus,
|
||||||
|
totalTime: jasmineTimer.elapsed(),
|
||||||
incompleteReason: incompleteReason,
|
incompleteReason: incompleteReason,
|
||||||
order: order,
|
order: order,
|
||||||
failedExpectations: topSuite.result.failedExpectations,
|
failedExpectations: topSuite.result.failedExpectations,
|
||||||
|
|||||||
@@ -61,22 +61,6 @@ describe('HtmlReporter', function() {
|
|||||||
).toEqual(1);
|
).toEqual(1);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('starts the timer when jasmine begins', function() {
|
|
||||||
var env = new jasmine.Env(),
|
|
||||||
startTimerSpy = jasmine.createSpy('start-timer-spy'),
|
|
||||||
reporter = new jasmineUnderTest.HtmlReporter({
|
|
||||||
env: env,
|
|
||||||
createElement: function() {
|
|
||||||
return document.createElement.apply(document, arguments);
|
|
||||||
},
|
|
||||||
timer: { start: startTimerSpy }
|
|
||||||
});
|
|
||||||
|
|
||||||
reporter.jasmineStarted({});
|
|
||||||
|
|
||||||
expect(startTimerSpy).toHaveBeenCalled();
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('when a spec is done', function() {
|
describe('when a spec is done', function() {
|
||||||
it('logs errors to the console and prints a special symbol if it is an empty spec', function() {
|
it('logs errors to the console and prints a special symbol if it is an empty spec', function() {
|
||||||
if (typeof console === 'undefined') {
|
if (typeof console === 'undefined') {
|
||||||
@@ -343,7 +327,6 @@ describe('HtmlReporter', function() {
|
|||||||
it('reports the run time', function() {
|
it('reports the run time', function() {
|
||||||
var env = new jasmineUnderTest.Env(),
|
var env = new jasmineUnderTest.Env(),
|
||||||
container = document.createElement('div'),
|
container = document.createElement('div'),
|
||||||
timer = jasmine.createSpyObj('timer', ['start', 'elapsed']),
|
|
||||||
getContainer = function() {
|
getContainer = function() {
|
||||||
return container;
|
return container;
|
||||||
},
|
},
|
||||||
@@ -355,16 +338,14 @@ describe('HtmlReporter', function() {
|
|||||||
},
|
},
|
||||||
createTextNode: function() {
|
createTextNode: function() {
|
||||||
return document.createTextNode.apply(document, arguments);
|
return document.createTextNode.apply(document, arguments);
|
||||||
},
|
}
|
||||||
timer: timer
|
|
||||||
});
|
});
|
||||||
|
|
||||||
reporter.initialize();
|
reporter.initialize();
|
||||||
|
|
||||||
reporter.jasmineStarted({});
|
reporter.jasmineStarted({});
|
||||||
|
|
||||||
timer.elapsed.and.returnValue(100);
|
reporter.jasmineDone({ totalTime: 100 });
|
||||||
reporter.jasmineDone({});
|
|
||||||
|
|
||||||
var duration = container.querySelector(
|
var duration = container.querySelector(
|
||||||
'.jasmine-alert .jasmine-duration'
|
'.jasmine-alert .jasmine-duration'
|
||||||
|
|||||||
@@ -1,52 +1,10 @@
|
|||||||
/* eslint-env node, es6 */
|
/* eslint-env node, es6 */
|
||||||
const path = require('path'),
|
const path = require('path'),
|
||||||
jasmineBrowser = require('jasmine-browser-runner'),
|
jasmineBrowser = require('jasmine-browser-runner'),
|
||||||
jasmineCore = require('../../lib/jasmine-core'),
|
jasmineCore = require('../../lib/jasmine-core');
|
||||||
useSauce = process.env.USE_SAUCE === 'true';
|
|
||||||
|
|
||||||
var config = require(path.resolve('spec/support/jasmine-browser.json'));
|
var config = require(path.resolve('spec/support/jasmine-browser.js'));
|
||||||
|
config.clearReporters = true;
|
||||||
config.jasmineCore = jasmineCore;
|
config.jasmineCore = jasmineCore;
|
||||||
|
|
||||||
function buildWebdriver() {
|
jasmineBrowser.runSpecs(config);
|
||||||
const webdriver = require('selenium-webdriver'),
|
|
||||||
Capability = webdriver.Capability;
|
|
||||||
if (useSauce) {
|
|
||||||
const username = process.env['SAUCE_USERNAME'],
|
|
||||||
accessKey = process.env['SAUCE_ACCESS_KEY'];
|
|
||||||
return new webdriver.Builder()
|
|
||||||
.withCapabilities({
|
|
||||||
name: `jasmine-core ${new Date().toISOString()}`,
|
|
||||||
[Capability.PLATFORM]: process.env['SAUCE_OS'],
|
|
||||||
[Capability.BROWSER_NAME]: process.env['JASMINE_BROWSER'],
|
|
||||||
[Capability.VERSION]: process.env['SAUCE_BROWSER_VERSION'],
|
|
||||||
build: `Core ${process.env['TRAVIS_BUILD_NUMBER'] || 'Ran locally'}`,
|
|
||||||
tags: ['Jasmine-Core'],
|
|
||||||
'tunnel-identifier': process.env['TRAVIS_JOB_NUMBER']
|
|
||||||
? process.env['TRAVIS_JOB_NUMBER'].toString()
|
|
||||||
: null
|
|
||||||
})
|
|
||||||
.usingServer(`http://${username}:${accessKey}@localhost:4445/wd/hub`)
|
|
||||||
.build();
|
|
||||||
} else {
|
|
||||||
return new webdriver.Builder()
|
|
||||||
.forBrowser(process.env['JASMINE_BROWSER'] || 'firefox')
|
|
||||||
.build();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const driver = buildWebdriver();
|
|
||||||
jasmineBrowser
|
|
||||||
.runSpecs(config, driver)
|
|
||||||
.then(function(runDetails) {
|
|
||||||
process.exitCode = runDetails.overallStatus === 'passed' ? 0 : 1;
|
|
||||||
|
|
||||||
if (useSauce) {
|
|
||||||
driver.executeScript(`sauce:job-result=${process.exitCode === 0}`);
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch(error => {
|
|
||||||
console.error(error);
|
|
||||||
})
|
|
||||||
.then(function() {
|
|
||||||
return driver ? driver.close() : true;
|
|
||||||
});
|
|
||||||
|
|||||||
47
spec/support/jasmine-browser.js
Normal file
47
spec/support/jasmine-browser.js
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
/* eslint-env node, es6 */
|
||||||
|
module.exports = {
|
||||||
|
srcDir: 'src',
|
||||||
|
srcFiles: [
|
||||||
|
'core/requireCore.js',
|
||||||
|
'core/base.js',
|
||||||
|
'core/util.js',
|
||||||
|
'core/Spec.js',
|
||||||
|
'core/Env.js',
|
||||||
|
'core/JsApiReporter.js',
|
||||||
|
'core/PrettyPrinter.js',
|
||||||
|
'core/Suite.js',
|
||||||
|
'core/**/*.js',
|
||||||
|
'html/**/*.js',
|
||||||
|
'**/*.js'
|
||||||
|
],
|
||||||
|
specDir: 'spec',
|
||||||
|
specFiles: ['**/*[Ss]pec.js', '!npmPackage/**/*'],
|
||||||
|
helpers: [
|
||||||
|
'helpers/asyncAwait.js',
|
||||||
|
'helpers/BrowserFlags.js',
|
||||||
|
'helpers/checkForMap.js',
|
||||||
|
'helpers/checkForSet.js',
|
||||||
|
'helpers/checkForSymbol.js',
|
||||||
|
'helpers/checkForTypedArrays.js',
|
||||||
|
'helpers/integrationMatchers.js',
|
||||||
|
'helpers/promises.js',
|
||||||
|
'helpers/defineJasmineUnderTest.js'
|
||||||
|
],
|
||||||
|
random: true,
|
||||||
|
browser: {
|
||||||
|
name: process.env.JASMINE_BROWSER || 'firefox',
|
||||||
|
useSauce: process.env.USE_SAUCE === 'true',
|
||||||
|
sauce: {
|
||||||
|
name: `jasmine-core ${new Date().toISOString()}`,
|
||||||
|
os: process.env.SAUCE_OS,
|
||||||
|
browserVersion: process.env.SAUCE_BROWSER_VERSION,
|
||||||
|
build: `Core ${process.env.TRAVIS_BUILD_NUMBER || 'Ran locally'}`,
|
||||||
|
tags: ['Jasmine-Core'],
|
||||||
|
tunnelIdentifier: process.env.TRAVIS_JOB_NUMBER
|
||||||
|
? process.env.TRAVIS_JOB_NUMBER.toString()
|
||||||
|
: null,
|
||||||
|
username: process.env.SAUCE_USERNAME,
|
||||||
|
accessKey: process.env.SAUCE_ACCESS_KEY
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
{
|
|
||||||
"srcDir": "src",
|
|
||||||
"srcFiles": [
|
|
||||||
"core/requireCore.js",
|
|
||||||
"core/base.js",
|
|
||||||
"core/util.js",
|
|
||||||
"core/Spec.js",
|
|
||||||
"core/Env.js",
|
|
||||||
"core/JsApiReporter.js",
|
|
||||||
"core/PrettyPrinter.js",
|
|
||||||
"core/Suite.js",
|
|
||||||
"core/**/*.js",
|
|
||||||
"html/**/*.js",
|
|
||||||
"**/*.js"
|
|
||||||
],
|
|
||||||
"specDir": "spec",
|
|
||||||
"specFiles": [
|
|
||||||
"**/*[Ss]pec.js",
|
|
||||||
"!npmPackage/**/*"
|
|
||||||
],
|
|
||||||
"helpers": [
|
|
||||||
"helpers/asyncAwait.js",
|
|
||||||
"helpers/BrowserFlags.js",
|
|
||||||
"helpers/checkForMap.js",
|
|
||||||
"helpers/checkForSet.js",
|
|
||||||
"helpers/checkForSymbol.js",
|
|
||||||
"helpers/checkForTypedArrays.js",
|
|
||||||
"helpers/integrationMatchers.js",
|
|
||||||
"helpers/promises.js",
|
|
||||||
"helpers/defineJasmineUnderTest.js"
|
|
||||||
],
|
|
||||||
"random": true
|
|
||||||
}
|
|
||||||
@@ -2,7 +2,7 @@ var path = require('path'),
|
|||||||
jasmineBrowser = require('jasmine-browser-runner'),
|
jasmineBrowser = require('jasmine-browser-runner'),
|
||||||
jasmineCore = require('../../lib/jasmine-core.js');
|
jasmineCore = require('../../lib/jasmine-core.js');
|
||||||
|
|
||||||
var configFile = process.argv[2] || 'jasmine-browser.json';
|
var configFile = process.argv[2] || 'jasmine-browser.js';
|
||||||
|
|
||||||
var config = require(path.resolve('spec/support', configFile));
|
var config = require(path.resolve('spec/support', configFile));
|
||||||
config.jasmineCore = jasmineCore;
|
config.jasmineCore = jasmineCore;
|
||||||
|
|||||||
@@ -640,6 +640,9 @@ getJasmineRequireObj().Env = function(j$) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var jasmineTimer = new j$.Timer();
|
||||||
|
jasmineTimer.start();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Information passed to the {@link Reporter#jasmineStarted} event.
|
* Information passed to the {@link Reporter#jasmineStarted} event.
|
||||||
* @typedef JasmineStartedInfo
|
* @typedef JasmineStartedInfo
|
||||||
@@ -675,6 +678,7 @@ getJasmineRequireObj().Env = function(j$) {
|
|||||||
* Information passed to the {@link Reporter#jasmineDone} event.
|
* Information passed to the {@link Reporter#jasmineDone} event.
|
||||||
* @typedef JasmineDoneInfo
|
* @typedef JasmineDoneInfo
|
||||||
* @property {OverallStatus} overallStatus - The overall result of the suite: 'passed', 'failed', or 'incomplete'.
|
* @property {OverallStatus} overallStatus - The overall result of the suite: 'passed', 'failed', or 'incomplete'.
|
||||||
|
* @property {Int} totalTime - The total time (in ms) that it took to execute the suite
|
||||||
* @property {IncompleteReason} incompleteReason - Explanation of why the suite was incomplete.
|
* @property {IncompleteReason} incompleteReason - Explanation of why the suite was incomplete.
|
||||||
* @property {Order} order - Information about the ordering (random or not) of this execution of the suite.
|
* @property {Order} order - Information about the ordering (random or not) of this execution of the suite.
|
||||||
* @property {Expectation[]} failedExpectations - List of expectations that failed in an {@link afterAll} at the global level.
|
* @property {Expectation[]} failedExpectations - List of expectations that failed in an {@link afterAll} at the global level.
|
||||||
@@ -683,6 +687,7 @@ getJasmineRequireObj().Env = function(j$) {
|
|||||||
reporter.jasmineDone(
|
reporter.jasmineDone(
|
||||||
{
|
{
|
||||||
overallStatus: overallStatus,
|
overallStatus: overallStatus,
|
||||||
|
totalTime: jasmineTimer.elapsed(),
|
||||||
incompleteReason: incompleteReason,
|
incompleteReason: incompleteReason,
|
||||||
order: order,
|
order: order,
|
||||||
failedExpectations: topSuite.result.failedExpectations,
|
failedExpectations: topSuite.result.failedExpectations,
|
||||||
|
|||||||
@@ -52,7 +52,6 @@ jasmineRequire.HtmlReporter = function(j$) {
|
|||||||
addToExistingQueryString =
|
addToExistingQueryString =
|
||||||
options.addToExistingQueryString || defaultQueryString,
|
options.addToExistingQueryString || defaultQueryString,
|
||||||
filterSpecs = options.filterSpecs,
|
filterSpecs = options.filterSpecs,
|
||||||
timer = options.timer || j$.noopTimer,
|
|
||||||
htmlReporterMain,
|
htmlReporterMain,
|
||||||
symbols,
|
symbols,
|
||||||
deprecationWarnings = [];
|
deprecationWarnings = [];
|
||||||
@@ -86,7 +85,6 @@ jasmineRequire.HtmlReporter = function(j$) {
|
|||||||
var totalSpecsDefined;
|
var totalSpecsDefined;
|
||||||
this.jasmineStarted = function(options) {
|
this.jasmineStarted = function(options) {
|
||||||
totalSpecsDefined = options.totalSpecsDefined || 0;
|
totalSpecsDefined = options.totalSpecsDefined || 0;
|
||||||
timer.start();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
var summary = createDom('div', { className: 'jasmine-summary' });
|
var summary = createDom('div', { className: 'jasmine-summary' });
|
||||||
@@ -165,7 +163,7 @@ jasmineRequire.HtmlReporter = function(j$) {
|
|||||||
createDom(
|
createDom(
|
||||||
'span',
|
'span',
|
||||||
{ className: 'jasmine-duration' },
|
{ className: 'jasmine-duration' },
|
||||||
'finished in ' + timer.elapsed() / 1000 + 's'
|
'finished in ' + doneResult.totalTime / 1000 + 's'
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user