118 lines
3.9 KiB
JavaScript
118 lines
3.9 KiB
JavaScript
import * as ConsoleReporter from '../src/consoleReporter.js';
|
|
|
|
describe('Console reporter base class', function () {
|
|
let reporter, timerSpies;
|
|
const jasmineCorePath = 'path/to/jasmine/core/jasmine.js';
|
|
|
|
beforeEach(function () {
|
|
timerSpies = {};
|
|
const timerSpy = id => {
|
|
timerSpies[id] = jasmine.createSpyObj('timer', ['start', 'elapsed']);
|
|
return timerSpies[id];
|
|
};
|
|
reporter = new ConsoleReporter.ConsoleReporter({
|
|
timerFactory: timerSpy,
|
|
jasmineCorePath,
|
|
});
|
|
});
|
|
|
|
it('can be instantiated', function () {
|
|
reporter = new ConsoleReporter.ConsoleReporter();
|
|
});
|
|
|
|
it('starts the main timer when Jasmine starts', function () {
|
|
reporter.jasmineStarted();
|
|
expect(timerSpies['main'].start).toHaveBeenCalled();
|
|
});
|
|
|
|
it('purges Jasmine internals from stack traces', function () {
|
|
const fakeStack = [
|
|
`foo${jasmineCorePath}`,
|
|
`bar ${jasmineCorePath}`,
|
|
'line of useful stack trace',
|
|
`baz ${jasmineCorePath}`,
|
|
].join('\n');
|
|
const stackTrace = reporter.filterStack(fakeStack);
|
|
expect(stackTrace).toMatch('line of useful stack trace');
|
|
expect(stackTrace).not.toMatch(jasmineCorePath);
|
|
});
|
|
|
|
describe('started signal', function () {
|
|
beforeEach(function () {
|
|
reporter = new ConsoleReporter.ConsoleReporter();
|
|
});
|
|
|
|
it('is emitted when the suite starts', function (done) {
|
|
reporter.connect('started', () => done());
|
|
reporter.jasmineStarted();
|
|
});
|
|
});
|
|
|
|
describe('complete signal', function () {
|
|
beforeEach(function () {
|
|
reporter = new ConsoleReporter.ConsoleReporter();
|
|
reporter.jasmineStarted();
|
|
});
|
|
|
|
it('is emitted with true when the suite is done', function (done) {
|
|
reporter.connect('complete', (_, success) => {
|
|
expect(success).toBeTruthy();
|
|
done();
|
|
});
|
|
reporter.jasmineDone();
|
|
});
|
|
|
|
it('is emitted with false if there are spec failures', function (done) {
|
|
reporter.connect('complete', (_, success) => {
|
|
expect(success).toBeFalsy();
|
|
done();
|
|
});
|
|
reporter.specDone({status: 'failed', failedExpectations: []});
|
|
reporter.jasmineDone();
|
|
});
|
|
|
|
it('is emitted with false if there are suite failures', function (done) {
|
|
reporter.connect('complete', (_, success) => {
|
|
expect(success).toBeFalsy();
|
|
done();
|
|
});
|
|
reporter.specDone({status: 'passed'});
|
|
reporter.suiteDone({failedExpectations: [{message: 'bananas'}]});
|
|
reporter.jasmineDone();
|
|
});
|
|
});
|
|
|
|
it('times individual suites', function () {
|
|
const suiteInfo = {id: 'foo'};
|
|
reporter.suiteStarted(suiteInfo);
|
|
expect(timerSpies['suite:foo'].start).toHaveBeenCalled();
|
|
|
|
timerSpies['suite:foo'].elapsed.and.returnValue(800);
|
|
reporter.suiteDone(suiteInfo);
|
|
expect(suiteInfo.time).toBe(800);
|
|
});
|
|
|
|
it('times individual specs', function () {
|
|
const specInfo = {
|
|
id: 'foo',
|
|
status: 'passed',
|
|
};
|
|
reporter.specStarted(specInfo);
|
|
expect(timerSpies['spec:foo'].start).toHaveBeenCalled();
|
|
|
|
timerSpies['spec:foo'].elapsed.and.returnValue(800);
|
|
reporter.specDone(specInfo);
|
|
expect(specInfo.time).toBe(800);
|
|
});
|
|
|
|
it('starts a timer', function () {
|
|
reporter.startTimer('foobar');
|
|
expect(timerSpies['foobar'].start).toHaveBeenCalled();
|
|
});
|
|
|
|
it('gets the elapsed time from a timer', function () {
|
|
reporter.startTimer('foobar');
|
|
timerSpies['foobar'].elapsed.and.returnValue(500);
|
|
expect(reporter.elapsedTime('foobar')).toBe(500);
|
|
});
|
|
});
|