Skip to content

Commit

Permalink
Added istanbul/jsdom for code coverage and leaner tests. Changed `inn…
Browse files Browse the repository at this point in the history
…erText` usage to `textContent` based on [this discussion](jsdom/jsdom#1245). Added tests for many evaluators.
  • Loading branch information
r4j4h committed Jun 17, 2016
1 parent 9c9953e commit 42d373b
Show file tree
Hide file tree
Showing 7 changed files with 234 additions and 37 deletions.
12 changes: 6 additions & 6 deletions lib/evaluators/evaluators.js
Original file line number Diff line number Diff line change
Expand Up @@ -50,15 +50,15 @@ function getFailedSpecs() {

for (j = 0; j < desc.length; ++j) {
failedSpecs[i].desc = failedSpecs[i].desc || [];
failedSpecs[i].desc.push( desc[j].innerText );
failedSpecs[i].desc.push( desc[j].textContent );
}
for (j = 0; j < fail.length; ++j) {
failedSpecs[i].fail = failedSpecs[i].fail || [];
failedSpecs[i].fail.push( fail[j].innerText );
failedSpecs[i].fail.push( fail[j].textContent );
}
for (j = 0; j < failStackTrace.length; ++j) {
failedSpecs[i].failStackTrace = failedSpecs[i].failStackTrace || [];
failedSpecs[i].failStackTrace.push( failStackTrace[j].innerText );
failedSpecs[i].failStackTrace.push( failStackTrace[j].textContent );
}
}

Expand Down Expand Up @@ -87,7 +87,7 @@ function getPendingSpecs() {

pendingSpecs[i] = pendingSpecs[i] || {};

pendingSpecs[i].name = el.innerText;
pendingSpecs[i].name = el.textContent;

}

Expand All @@ -103,7 +103,7 @@ function getPendingSpecs() {
* @return {string} Alert bar result summary text
*/
function getResultSummary() {
return ( document.body.querySelector('.jasmine-alert .jasmine-bar') || document.body.querySelector('.jasmine-bar') ).innerText;
return ( document.body.querySelector('.jasmine-alert .jasmine-bar') || document.body.querySelector('.jasmine-bar') ).textContent;
}


Expand All @@ -114,7 +114,7 @@ function getResultSummary() {
* @return {string} Title and Version
*/
function getJasmineVersion() {
return document.body.querySelector('.jasmine-banner .jasmine-title').innerText + ' ' + document.body.querySelector('.jasmine-banner .jasmine-version').innerText;
return document.body.querySelector('.jasmine-banner .jasmine-title').textContent + ' ' + document.body.querySelector('.jasmine-banner .jasmine-version').textContent;
}

/**
Expand Down
7 changes: 5 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@
},
"license": "MIT",
"scripts": {
"test": "./node_modules/.bin/jasmine"
"test": "./node_modules/.bin/jasmine",
"coverage": "node_modules/.bin/istanbul cover node_modules/.bin/jasmine -x **/spec/**"
},
"files": [
"index.js",
Expand All @@ -26,7 +27,9 @@
"console-styles": "https://github.com/r4j4h/console-styles.git"
},
"devDependencies": {
"jasmine": "^2.4.1"
"istanbul": "^0.4.2",
"jasmine": "^2.4.1",
"jsdom": "^9.2.1"
},
"bugs": {
"url": "https://github.com/r4j4h/jasmine-phantom-utils/issues"
Expand Down
58 changes: 58 additions & 0 deletions spec/evaluators/getFailedSpecsSpec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
var jsdom = require('jsdom');

describe('getFailedSpecs', function() {

describe('returns the failed tests with their names, failure reason, and call stacks as objects in an array', function() {

beforeAll(function() {
this.evaluator = require('../../lib/evaluators/evaluators.js' ).getFailedSpecs;
});

afterAll(function() {
global.document = this.realDocument;
});

function setDom(dom) {
this.document = jsdom.jsdom(dom);
var global = (function() { return this; })();
this.realDocument = global.document;
global.document = this.document;
}

it('detects success summary', function() {
setDom('<body><div class="jasmine_html-reporter">' +
'<div class="jasmine-spec-detail jasmine-failed">' +
'<div class="jasmine-description">desc1</div>' +
'<div class="jasmine-messages">' +
'<div class="jasmine-result-message">msg1.1</div>' +
'</div>' +
'<div class="jasmine-stack-trace">stacktrace1</div>' +
'</div>' +
'<div class="jasmine-spec-detail jasmine-failed">' +
'<div class="jasmine-description">desc2</div>' +
'<div class="jasmine-messages">' +
'<div class="jasmine-result-message">msg2.1</div>' +
'<div class="jasmine-result-message">msg2.2</div>' +
'</div>' +
'<div class="jasmine-stack-trace">stacktrace2</div>' +
'</div>' +
'</div></body>');

var actual = this.evaluator();
expect( actual ).toEqual([
{
desc: ['desc1'],
fail: ['msg1.1'],
failStackTrace: ['stacktrace1']
},
{
desc: ['desc2'],
fail: ['msg2.1', 'msg2.2'],
failStackTrace: ['stacktrace2']
}
]);
});

});

});
46 changes: 17 additions & 29 deletions spec/evaluators/getJasmineVersionSpec.js
Original file line number Diff line number Diff line change
@@ -1,43 +1,31 @@
var jsdom = require('jsdom');

describe('getJasmineVersion', function() {

describe('returns jasmine title and version from page', function() {

beforeAll(function() {
this.evaluator = require('../../lib/evaluators/evaluators.js' ).getJasmineVersion;
});

beforeEach(function() {
this.documentMock = jasmine.createSpy('document');
this.documentMock.body = jasmine.createSpyObj('body', ['querySelector']);

this.titleQuerySelectorResultMock = {
innerText: 'title'
};
this.versionQuerySelectorResultMock = {
innerText: 'version'
};
this.elseQuerySelectorResultMock = {
innerText: 'some-unexpected-inner-text'
};

var that = this;
this.documentMock.body.querySelector.and.callFake( function(selector) {
if ( selector == '.jasmine-banner .jasmine-title' ) {
return that.titleQuerySelectorResultMock;
} else if ( selector = '.jasmine-banner .jasmine-version' ) {
return that.versionQuerySelectorResultMock;
} else {
return that.elseQuerySelectorResultMock;
}
} );
this.document = jsdom.jsdom('<body><div class="jasmine-banner">' +
'<span class="jasmine-title">jasmine</span>' +
'<li class="jasmine-version">?</li>' +
'</div></body>');

var global = (function() { return this; })();
global.document = this.documentMock;
this.realDocument = global.document;
global.document = this.document;
});

it('returns jasmine title and version from page', function() {
var evaluator = require('../../lib/evaluators/evaluators.js' ).getJasmineVersion;

var actual = evaluator();
afterAll(function() {
global.document = this.realDocument;
});

expect( actual ).toBe('title version');
it('returns jasmine title and version from page', function() {
var actual = this.evaluator();
expect( actual ).toBe('jasmine ?');
});

});
Expand Down
64 changes: 64 additions & 0 deletions spec/evaluators/getPendingSpecsSpec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
var jsdom = require('jsdom');

describe('getPendingSpecs', function() {

describe('returns the pending tests with their names as objects in an array', function() {

beforeAll(function() {
this.evaluator = require('../../lib/evaluators/evaluators.js' ).getPendingSpecs;
});

afterAll(function() {
global.document = this.realDocument;
});

function setDom(dom) {
this.document = jsdom.jsdom(dom);
var global = (function() { return this; })();
this.realDocument = global.document;
global.document = this.document;
}

it('detects summary', function() {
setDom('<div class="jasmine_html-reporter">' +
'<div class="jasmine-summary">' +
'<div class="pending">' +
'<div class="jasmine-messages">' +
'<div class="jasmine-result-message">Some skipped test</div>' +
'</div>' +
'<div class="jasmine-stack-trace">stack trace info</div>' +
'</div>' +
'</div>' +
'</div>');

var actual = this.evaluator();
expect( actual ).toEqual([{name:'Some skipped teststack trace info'}]);
});

it('detects multiple summaries', function() {
setDom('<div class="jasmine_html-reporter">' +
'<div class="jasmine-summary">' +
'<div class="pending">' +
'<div class="jasmine-messages">' +
'<div class="jasmine-result-message">Some skipped test1</div>' +
'</div>' +
'<div class="jasmine-stack-trace">stack trace info1</div>' +
'</div>' +
'<div class="pending">' +
'<div class="jasmine-messages">' +
'<div class="jasmine-result-message">Some skipped test2</div>' +
'</div>' +
'<div class="jasmine-stack-trace">stack trace info2</div>' +
'</div>' +
'</div>');

var actual = this.evaluator();
expect( actual ).toEqual([
{name:'Some skipped test1stack trace info1'},
{name:'Some skipped test2stack trace info2'}
]);
});

});

});
42 changes: 42 additions & 0 deletions spec/evaluators/getResultSummarySpec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
var jsdom = require('jsdom');

describe('getResultSummarySpec', function() {

describe('returns the summary blurb from page', function() {

beforeAll(function() {
this.evaluator = require('../../lib/evaluators/evaluators.js' ).getResultSummary;
});

afterAll(function() {
global.document = this.realDocument;
});

function setDom(dom) {
this.document = jsdom.jsdom(dom);
var global = (function() { return this; })();
this.realDocument = global.document;
global.document = this.document;
}

it('detects success summary', function() {
setDom('<body><div class="jasmine-bar">' +
'38 specs' +
'</div></body>');

var actual = this.evaluator();
expect( actual ).toBe('38 specs');
});

it('detects failure', function() {
setDom('<body><div class="jasmine-alert">' +
'<span class="jasmine-bar">38 specs | 1 failing</span>' +
'</div></body>');

var actual = this.evaluator();
expect( actual ).toBe('38 specs | 1 failing');
});

});

});
42 changes: 42 additions & 0 deletions spec/evaluators/getSymbolsStatusArraySpec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
var jsdom = require('jsdom');

describe('getSymbolsStatusArray', function() {

describe('returns the status array from page', function() {

beforeAll(function() {
this.evaluator = require('../../lib/evaluators/evaluators.js' ).getSymbolsStatusArray;
});

beforeEach(function() {
this.document = jsdom.jsdom('<body><div class="jasmine-symbol-summary">' +
'<li class="passing">.</li>' +
'<li class="pending">?</li>' +
'<li class="failed">x</li>' +
'<li class="passing">.</li>' +
'<li class="unexpected">Y?</li>' +
'</div></body>');

var global = (function() { return this; })();
this.realDocument = global.document;
global.document = this.document;
});

afterAll(function() {
global.document = this.realDocument;
});

it('returns jasmine title and version from page', function() {
var actual = this.evaluator();
expect( actual ).toEqual([
'passing',
'pending',
'failed',
'passing',
'unexpected'
]);
});

});

});

0 comments on commit 42d373b

Please sign in to comment.