Skip to content
This repository has been archived by the owner on May 8, 2020. It is now read-only.

Commit

Permalink
feat(logger): Add tests for logger
Browse files Browse the repository at this point in the history
  • Loading branch information
zakhenry committed Jun 28, 2016
1 parent 97448cf commit e3d90b3
Show file tree
Hide file tree
Showing 2 changed files with 134 additions and 0 deletions.
101 changes: 101 additions & 0 deletions src/common/services/consoleLogger.service.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
import { it, expect, describe} from '@angular/core/testing';
import { ConsoleLogger } from './consoleLogger.service';
import {stripColor, hasColor} from 'chalk';
import Spy = jasmine.Spy;
import { LogLevel } from './logger.service';

describe('Console Logger', () => {

let logger:ConsoleLogger;
let consoleLogSpy:Spy;
let consoleErrorSpy:Spy;
let consoleWarnSpy:Spy;

beforeEach(() => {
logger = new ConsoleLogger();
consoleLogSpy = spyOn(console, 'log');
consoleErrorSpy = spyOn(console, 'error');
consoleWarnSpy = spyOn(console, 'warn');
});

afterEach(() => {
consoleLogSpy.calls.reset();
consoleErrorSpy.calls.reset();
consoleWarnSpy.calls.reset();
});

it('logs to the console with a timestamp', () => {

logger.info('example');

expect(stripColor(consoleLogSpy.calls.first().args[0])).toMatch(/\[\d{2}:\d{2}:\d{2}\]/);
expect(stripColor(consoleLogSpy.calls.first().args[1])).toEqual('example');
});

it('can have a prefix applied', () => {

logger.source('test').info('message');

expect(stripColor(consoleLogSpy.calls.first().args[1])).toEqual('[test]');
expect(stripColor(consoleLogSpy.calls.first().args[2])).toEqual('message');

});

it('can syntax highlight passed objects', () => {

logger.debug({foo:1});

expect(hasColor(consoleLogSpy.calls.first().args[1])).toBe(true);
expect(stripColor(consoleLogSpy.calls.first().args[1])).toEqual("{ foo: 1 }");

});

['emergency',
'alert',
'critical',
'error'].forEach((logLevel:LogLevel) => {

it(`will "console.error" for level [${logLevel}]`, () => {

logger[logLevel](logLevel);

expect(stripColor(consoleErrorSpy.calls.first().args[1])).toEqual(logLevel);
expect(consoleLogSpy).not.toHaveBeenCalled();
expect(consoleWarnSpy).not.toHaveBeenCalled();

});

});

[
'warning',
'notice'].forEach((logLevel:LogLevel) => {

it(`will "console.warn" for level [${logLevel}]`, () => {

logger[logLevel](logLevel);

expect(stripColor(consoleWarnSpy.calls.first().args[1])).toEqual(logLevel);
expect(consoleLogSpy).not.toHaveBeenCalled();
expect(consoleErrorSpy).not.toHaveBeenCalled();

});

});

['info',
'debug'].forEach((logLevel:LogLevel) => {

it(`will "console.log" for level [${logLevel}]`, () => {

logger[logLevel](logLevel);

expect(stripColor(consoleLogSpy.calls.first().args[1])).toEqual(logLevel);
expect(consoleErrorSpy).not.toHaveBeenCalled();
expect(consoleWarnSpy).not.toHaveBeenCalled();

});

});

});
33 changes: 33 additions & 0 deletions src/common/services/logger.service.spec.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { Logger, LogLevel } from './logger.service';
import { Injectable } from '@angular/core';
import { fit, it, inject, beforeEachProviders, expect, describe } from '@angular/core/testing';

@Injectable()
export class LoggerMock extends Logger {
Expand All @@ -13,3 +14,35 @@ export class LoggerMock extends Logger {
}

}

@Injectable()
class TestClass {

constructor(public logger:Logger){

}

}


const providers = [
TestClass,
{provide: Logger, useClass: LoggerMock},
];

describe('Logger mock', () => {

beforeEachProviders(() => providers);

it('Can be injected with the Logger token', inject([TestClass], (c: TestClass) => {

let consoleSpy = spyOn(console, 'log');

expect(c instanceof TestClass).toBe(true);
expect(c.logger instanceof Logger).toBe(true);
expect(c.logger instanceof LoggerMock).toBe(true);
expect(c.logger.debug() instanceof Logger).toBe(true);
expect(consoleSpy).not.toHaveBeenCalled();

}));
});

0 comments on commit e3d90b3

Please sign in to comment.