Skip to content

Commit

Permalink
Merge pull request #16 from wolframkriesing/make-reporter-have-pass-a…
Browse files Browse the repository at this point in the history
…nd-fail

Make reporter have `pass()` and `fail()`, no more `oneStep()`.
  • Loading branch information
wolframkriesing authored Nov 19, 2018
2 parents 298137c + fa21adf commit d0f055d
Show file tree
Hide file tree
Showing 6 changed files with 59 additions and 65 deletions.
23 changes: 13 additions & 10 deletions lib/reporters/console.js
Original file line number Diff line number Diff line change
@@ -1,20 +1,23 @@
const testDescription = (specs, description) => {
const allSpecs = specs.join(' ');
return (allSpecs ? allSpecs + ' ' : allSpecs) + description;
};

export class Console {
constructor(reporter = console) {
this._print = (...args) => reporter.log(...args);
}
fail(errorMessage) {
this._print(errorMessage);
}
final(failures, passes, elapsedTime) {
this._print(`${failures} failed, ${passes} succeeded in ${elapsedTime.toFixed(2)}ms`);
}
oneStep(specs, description, result, elapsedTime) {
const allSpecs = specs.join(' ');
const testDesc = (allSpecs ? allSpecs + ' ' : allSpecs) + description;

const successSign = '✓';
fail(specs, description, errorMessage, elapsedTime) {
const testDesc = testDescription(specs, description);
const failureSign = 'x';
const sign = result ? successSign : failureSign;
this._print(`${testDesc} => ${sign} in ${elapsedTime.toFixed(2)}ms`);
this._print(`${testDesc} => ${failureSign} in ${elapsedTime.toFixed(2)}ms\n${errorMessage}`);
}
pass(specs, description, elapsedTime) {
const testDesc = testDescription(specs, description);
const successSign = '✓';
this._print(`${testDesc} => ${successSign} in ${elapsedTime.toFixed(2)}ms`);
}
}
22 changes: 7 additions & 15 deletions lib/reporters/console.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,22 +7,14 @@ describe('Console Reporter', () => {
it('renders `fail()`', () => {
const log = buildSpy();
const reporter = new Console({log});
reporter.fail('error message');
assert.deepEqual(log.data.calledWith, [['error message']]);
reporter.fail([], 'desc', 'error message', 42);
assert.deepEqual(log.data.calledWith, [['desc => x in 42.00ms\nerror message']]);
});
describe('renders `oneStep()`', () => {
it('for a failure', () => {
const log = buildSpy();
const reporter = new Console({log});
reporter.oneStep([], 'desc', false, 0);
assert.deepEqual(log.data.calledWith, [["desc => x in 0.00ms"]]);
});
it('for a passed test', () => {
const log = buildSpy();
const reporter = new Console({log});
reporter.oneStep([], 'desc', true, 0);
assert.deepEqual(log.data.calledWith, [["desc => ✓ in 0.00ms"]]);
});
it('renders `pass()`', () => {
const log = buildSpy();
const reporter = new Console({log});
reporter.pass([], 'desc', 0);
assert.deepEqual(log.data.calledWith, [["desc => ✓ in 0.00ms"]]);
});
it('renders `final()`', () => {
const log = buildSpy();
Expand Down
7 changes: 4 additions & 3 deletions lib/reporters/minimal-console.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@ export class MinimalConsole {
constructor(printer = console) {
this._log = (...args) => printer.log(...args);
}
fail(errorMessage) {
this._log(errorMessage);
fail(specs, description, errorMessage, elapsedTime) {
const failureSign = 'x';
this._log(`${[...specs, description]} => ${failureSign} in ${elapsedTime.toFixed(2)}ms\n${errorMessage}`);
}
oneStep() {}
pass() {}
final(failures, passes, elapsedTime) {
this._log(`${failures} failed, ${passes} succeeded in ${elapsedTime.toFixed(2)}ms`);
}
Expand Down
22 changes: 7 additions & 15 deletions lib/reporters/minimal-console.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,22 +7,14 @@ describe('Console Reporter', () => {
it('renders `fail()`', () => {
const log = buildSpy();
const reporter = new MinimalConsole({log});
reporter.fail('error message');
assert.deepEqual(log.data.calledWith, [['error message']]);
reporter.fail([], 'desc', 'error message', 42);
assert.deepEqual(log.data.calledWith, [['desc => x in 42.00ms\nerror message']]);
});
describe('renders `oneStep()`', () => {
it('for a failure print nothing', () => {
const log = buildSpy();
const reporter = new MinimalConsole({log});
reporter.oneStep([], 'desc', false, 0);
assert.deepEqual(log.data.calledWith, []);
});
it('for a passed test print nothing', () => {
const log = buildSpy();
const reporter = new MinimalConsole({log});
reporter.oneStep([], 'desc', true, 0);
assert.deepEqual(log.data.calledWith, []);
});
it('renders `pass()`', () => {
const log = buildSpy();
const reporter = new MinimalConsole({log});
reporter.pass([], 'desc', 0);
assert.deepEqual(log.data.calledWith, []);
});
it('renders `final()`', () => {
const log = buildSpy();
Expand Down
7 changes: 4 additions & 3 deletions lib/runner.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@ import { execute } from './execute';

const executeUnit = async ({ description, testFunction, specs, timeout }, {reporter, execute}) => {
const { result, errorMessage, elapsedTime } = await execute(testFunction, timeout);
reporter.oneStep(specs, description, result, elapsedTime);
if (!result) {
reporter.fail(errorMessage);
if (result) {
reporter.pass(specs, description, elapsedTime);
} else {
reporter.fail(specs, description, errorMessage, elapsedTime);
}
return result;
};
Expand Down
43 changes: 24 additions & 19 deletions tests/runner.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,24 +4,18 @@ import { describe, it } from '../lib';
import { runner } from '../lib/runner';
import { UnitCollector } from '../lib/unit-collector';

const reporter = {
step: buildSpy(),
result: buildSpy(),
log: buildSpy(),
newLine: buildSpy(),

const buildReporter = () => ({
fail: buildSpy(),
final: buildSpy(),
oneStep: buildSpy(),
};

pass: buildSpy(),
});
const process = { exit: buildSpy() };
const noop = () => {};

const clearMocks = () => process.exit = buildSpy();

const run = (unitCollector, execute) =>
runner({ reporter }, { unitCollector, stopTimer: noop }, { execute, process });
const run = (unitCollector, execute, reporter = buildReporter()) =>
runner({ reporter: reporter }, { unitCollector, stopTimer: noop }, { execute, process });

describe('Runner', () => {
it('should execute single executable and report results for steps and overall to reporter', async () => {
Expand All @@ -32,9 +26,10 @@ describe('Runner', () => {

unitCollector.addUnit(description, testFunction);

await run(unitCollector, execute);
const reporter = buildReporter();
await run(unitCollector, execute, reporter);

assert(reporter.oneStep.calledWith([''], description, true, undefined));
assert.deepEqual(reporter.pass.data.calledWith, [[[], description, undefined]]);
assert(reporter.final.calledWith(0, 1, undefined));
});

Expand All @@ -50,9 +45,13 @@ describe('Runner', () => {
unitCollector.addUnit(unitDescription, testFunction);
});

await run(unitCollector, execute);
const reporter = buildReporter();
await run(unitCollector, execute, reporter);

assert(reporter.oneStep.calledWith([specDescription], unitDescription, true, undefined));
assert.deepEqual(reporter.pass.data.calledWith, [
[[specDescription], unitDescription, undefined],
[[specDescription], unitDescription, undefined],
]);
assert(reporter.final.calledWith(0, 2, undefined));
});

Expand All @@ -68,9 +67,13 @@ describe('Runner', () => {
unitCollector.addUnit(unitDescription, testFunction);
});

await run(unitCollector, execute);
const reporter = buildReporter();
await run(unitCollector, execute, reporter);

assert(reporter.oneStep.calledWith([specDescription], unitDescription, true, undefined));
assert.deepEqual(reporter.pass.data.calledWith, [
[[specDescription], unitDescription, undefined],
[[specDescription], unitDescription, undefined],
]);
assert(reporter.final.calledWith(0, 2, undefined));
});

Expand All @@ -89,9 +92,11 @@ describe('Runner', () => {
unitCollector.addUnit(unitDescription, testFunction);
});

await run(unitCollector, execute);
const reporter = buildReporter();
await run(unitCollector, execute, reporter);

assert(reporter.fail.calledWith(failureObj.description));
assert.deepEqual(reporter.fail.data.calledWith, [[[specDescription], unitDescription, failureObj.errorMessage, undefined]]);
assert.deepEqual(reporter.pass.data.calledWith, []);
});

it("should exit process with the code 0 if tests are passed", async () => {
Expand Down

0 comments on commit d0f055d

Please sign in to comment.