Added app, tests, lint to BUCK file for web/gui2

Change-Id: I94912cb18f31db26971b66c9d851fb57f022df54
diff --git a/web/gui2/src/main/webapp/tests/app/detectbrowser.directive.spec.ts b/web/gui2/src/main/webapp/tests/app/detectbrowser.directive.spec.ts
index 380a7be..06715cd 100644
--- a/web/gui2/src/main/webapp/tests/app/detectbrowser.directive.spec.ts
+++ b/web/gui2/src/main/webapp/tests/app/detectbrowser.directive.spec.ts
@@ -13,48 +13,57 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import { DetectBrowserDirective } from '../../app/detectbrowser.directive';
+import { TestBed, inject } from '@angular/core/testing';
+
 import { LogService } from '../../app/log.service';
+import { ConsoleLoggerService } from '../../app/consolelogger.service';
+import { DetectBrowserDirective } from '../../app/detectbrowser.directive';
+import { ActivatedRoute, Params } from '@angular/router';
 import { FnService } from '../../app/fw/util/fn.service';
 import { OnosService } from '../../app/onos.service';
-import { ActivatedRoute, Router} from '@angular/router';
+import { of } from 'rxjs';
 
-class MockOnosService extends OnosService {
-    // Override things as necessary
+class MockFnService extends FnService {
+    constructor(ar: ActivatedRoute, log: LogService) {
+        super(ar, log);
+    }
 }
 
-class MockFunctionService extends FnService {
-    // Override things as necessary
+class MockOnosService {}
+
+class MockActivatedRoute extends ActivatedRoute {
+    constructor(params: Params) {
+        super();
+        this.queryParams = of(params);
+    }
 }
 
 /**
  * ONOS GUI -- Detect Browser Directive - Unit Tests
  */
 describe('DetectBrowserDirective', () => {
-
-    let onos: MockOnosService;
-    let fs: MockFunctionService;
     let log: LogService;
     let ar: ActivatedRoute;
-    let directive: DetectBrowserDirective;
 
     beforeEach(() => {
-        log = new LogService();
-        ar = new ActivatedRoute();
-        onos = new MockOnosService(log);
-        fs = new MockFunctionService(ar, log);
-        directive = new DetectBrowserDirective(fs, log, onos);
+        log = new ConsoleLoggerService();
+        ar = new MockActivatedRoute(['debug', 'DetectBrowserDirective']);
+
+        TestBed.configureTestingModule({
+            providers: [ DetectBrowserDirective,
+                { provide: FnService, useValue: new MockFnService(ar, log) },
+                { provide: LogService, useValue: log },
+                { provide: OnosService, useClass: MockOnosService },
+                { provide: Document, useValue: document },
+            ]
+        });
     });
 
     afterEach(() => {
-        onos = null;
-        fs = null;
         log = null;
-        ar = null;
-        directive = null;
     });
 
-    it('should create an instance', () => {
+    it('should create an instance', inject([DetectBrowserDirective], (directive: DetectBrowserDirective) => {
         expect(directive).toBeTruthy();
-    });
+    }));
 });
diff --git a/web/gui2/src/main/webapp/tests/app/fw/layer/detailspanel.service.spec.ts b/web/gui2/src/main/webapp/tests/app/fw/layer/detailspanel.service.spec.ts
index 982200b..80f8d5a 100644
--- a/web/gui2/src/main/webapp/tests/app/fw/layer/detailspanel.service.spec.ts
+++ b/web/gui2/src/main/webapp/tests/app/fw/layer/detailspanel.service.spec.ts
@@ -15,19 +15,51 @@
  */
 import { TestBed, inject } from '@angular/core/testing';
 
+import { LogService } from '../../../../app/log.service';
+import { ConsoleLoggerService } from '../../../../app/consolelogger.service';
 import { DetailsPanelService } from '../../../../app/fw/layer/detailspanel.service';
+import { EditableTextService } from '../../../../app/fw/layer/editabletext.service';
+import { FnService } from '../../../../app/fw/util/fn.service';
+import { IconService } from '../../../../app/fw/svg/icon.service';
+import { MastService } from '../../../../app/fw/mast/mast.service';
+import { PanelService } from '../../../../app/fw/layer/panel.service';
+import { WebSocketService } from '../../../../app/fw/remote/websocket.service';
+
+class MockEditableTextService {}
+
+class MockIconService {}
+
+class MockFnService {}
+
+class MockMastService {}
+
+class MockPanelService {}
+
+class MockWebSocketService {}
 
 /**
  * ONOS GUI -- Layer -- Details Panel Service - Unit Tests
  */
 describe('DetailsPanelService', () => {
-  beforeEach(() => {
-    TestBed.configureTestingModule({
-      providers: [DetailsPanelService]
-    });
-  });
+    let log: LogService;
 
-  it('should be created', inject([DetailsPanelService], (service: DetailsPanelService) => {
-    expect(service).toBeTruthy();
-  }));
+    beforeEach(() => {
+        log = new ConsoleLoggerService();
+
+        TestBed.configureTestingModule({
+            providers: [DetailsPanelService,
+                { provide: EditableTextService, useClass: MockEditableTextService },
+                { provide: FnService, useClass: MockFnService },
+                { provide: IconService, useClass: MockIconService },
+                { provide: LogService, useValue: log },
+                { provide: MastService, useClass: MockMastService },
+                { provide: PanelService, useClass: MockPanelService },
+                { provide: WebSocketService, useClass: MockWebSocketService },
+            ]
+        });
+    });
+
+    it('should be created', inject([DetailsPanelService], (service: DetailsPanelService) => {
+        expect(service).toBeTruthy();
+    }));
 });
diff --git a/web/gui2/src/main/webapp/tests/app/fw/layer/dialog.service.spec.ts b/web/gui2/src/main/webapp/tests/app/fw/layer/dialog.service.spec.ts
index 3035122..66d3b85 100644
--- a/web/gui2/src/main/webapp/tests/app/fw/layer/dialog.service.spec.ts
+++ b/web/gui2/src/main/webapp/tests/app/fw/layer/dialog.service.spec.ts
@@ -15,19 +15,39 @@
  */
 import { TestBed, inject } from '@angular/core/testing';
 
+import { LogService } from '../../../../app/log.service';
+import { ConsoleLoggerService } from '../../../../app/consolelogger.service';
 import { DialogService } from '../../../../app/fw/layer/dialog.service';
+import { FnService } from '../../../../app/fw/util/fn.service';
+import { KeyService } from '../../../../app/fw/util/key.service';
+import { PanelService } from '../../../../app/fw/layer/panel.service';
+
+class MockFnService {}
+
+class MockKeyService {}
+
+class MockPanelService {}
 
 /**
  * ONOS GUI -- Layer -- Dialog Service - Unit Tests
  */
 describe('DialogService', () => {
-  beforeEach(() => {
-    TestBed.configureTestingModule({
-      providers: [DialogService]
-    });
-  });
+    let log: LogService;
 
-  it('should be created', inject([DialogService], (service: DialogService) => {
-    expect(service).toBeTruthy();
-  }));
+    beforeEach(() => {
+        log = new ConsoleLoggerService();
+
+        TestBed.configureTestingModule({
+            providers: [DialogService,
+                { provide: LogService, useValue: log },
+                { provide: FnService, useClass: MockFnService },
+                { provide: KeyService, useClass: MockKeyService },
+                { provide: PanelService, useClass: MockPanelService },
+            ]
+        });
+    });
+
+    it('should be created', inject([DialogService], (service: DialogService) => {
+        expect(service).toBeTruthy();
+    }));
 });
diff --git a/web/gui2/src/main/webapp/tests/app/fw/layer/editabletext.service.spec.ts b/web/gui2/src/main/webapp/tests/app/fw/layer/editabletext.service.spec.ts
index 5ae266a..05663c7 100644
--- a/web/gui2/src/main/webapp/tests/app/fw/layer/editabletext.service.spec.ts
+++ b/web/gui2/src/main/webapp/tests/app/fw/layer/editabletext.service.spec.ts
@@ -15,19 +15,35 @@
  */
 import { TestBed, inject } from '@angular/core/testing';
 
+import { LogService } from '../../../../app/log.service';
+import { ConsoleLoggerService } from '../../../../app/consolelogger.service';
 import { EditableTextService } from '../../../../app/fw/layer/editabletext.service';
+import { KeyService } from '../../../../app/fw/util/key.service';
+import { WebSocketService } from '../../../../app/fw/remote/websocket.service';
+
+class MockKeyService {}
+
+class MockWebSocketService {}
 
 /**
  * ONOS GUI -- Layer -- Editable Text Service - Unit Tests
  */
 describe('EditableTextService', () => {
-  beforeEach(() => {
-    TestBed.configureTestingModule({
-      providers: [EditableTextService]
-    });
-  });
+    let log: LogService;
 
-  it('should be created', inject([EditableTextService], (service: EditableTextService) => {
-    expect(service).toBeTruthy();
-  }));
+    beforeEach(() => {
+        log = new ConsoleLoggerService();
+
+        TestBed.configureTestingModule({
+            providers: [EditableTextService,
+                { provide: LogService, useValue: log },
+                { provide: KeyService, useClass: MockKeyService },
+                { provide: WebSocketService, useClass: MockWebSocketService },
+            ]
+        });
+    });
+
+    it('should be created', inject([EditableTextService], (service: EditableTextService) => {
+        expect(service).toBeTruthy();
+    }));
 });
diff --git a/web/gui2/src/main/webapp/tests/app/fw/layer/flash.service.spec.ts b/web/gui2/src/main/webapp/tests/app/fw/layer/flash.service.spec.ts
index 339742b..3b0eb3e 100644
--- a/web/gui2/src/main/webapp/tests/app/fw/layer/flash.service.spec.ts
+++ b/web/gui2/src/main/webapp/tests/app/fw/layer/flash.service.spec.ts
@@ -15,19 +15,27 @@
  */
 import { TestBed, inject } from '@angular/core/testing';
 
+import { LogService } from '../../../../app/log.service';
+import { ConsoleLoggerService } from '../../../../app/consolelogger.service';
 import { FlashService } from '../../../../app/fw/layer/flash.service';
 
 /**
  * ONOS GUI -- Layer -- Flash Service - Unit Tests
  */
 describe('FlashService', () => {
-  beforeEach(() => {
-    TestBed.configureTestingModule({
-      providers: [FlashService]
-    });
-  });
+    let log: LogService;
 
-  it('should be created', inject([FlashService], (service: FlashService) => {
-    expect(service).toBeTruthy();
-  }));
+    beforeEach(() => {
+        log = new ConsoleLoggerService();
+
+        TestBed.configureTestingModule({
+            providers: [FlashService,
+                { provide: LogService, useValue: log },
+            ]
+        });
+    });
+
+    it('should be created', inject([FlashService], (service: FlashService) => {
+        expect(service).toBeTruthy();
+    }));
 });
diff --git a/web/gui2/src/main/webapp/tests/app/fw/layer/loading.service.spec.ts b/web/gui2/src/main/webapp/tests/app/fw/layer/loading.service.spec.ts
index 551f72d..92655fa 100644
--- a/web/gui2/src/main/webapp/tests/app/fw/layer/loading.service.spec.ts
+++ b/web/gui2/src/main/webapp/tests/app/fw/layer/loading.service.spec.ts
@@ -15,19 +15,42 @@
  */
 import { TestBed, inject } from '@angular/core/testing';
 
+import { LogService } from '../../../../app/log.service';
+import { ConsoleLoggerService } from '../../../../app/consolelogger.service';
 import { LoadingService } from '../../../../app/fw/layer/loading.service';
+import { FnService } from '../../../../app/fw/util/fn.service';
+import { ThemeService } from '../../../../app/fw/util/theme.service';
+import { WebSocketService } from '../../../../app/fw/remote/websocket.service';
+
+class MockFnService {
+    debug() {
+    }
+}
+
+class MockThemeService {}
+
+class MockWebSocketService {}
 
 /**
  * ONOS GUI -- Layer -- Loading Service - Unit Tests
  */
 describe('LoadingService', () => {
-  beforeEach(() => {
-    TestBed.configureTestingModule({
-      providers: [LoadingService]
-    });
-  });
+    let log: LogService;
 
-  it('should be created', inject([LoadingService], (service: LoadingService) => {
-    expect(service).toBeTruthy();
-  }));
+    beforeEach(() => {
+        log = new ConsoleLoggerService();
+
+        TestBed.configureTestingModule({
+            providers: [LoadingService,
+                { provide: LogService, useValue: log },
+                { provide: FnService, useClass: MockFnService },
+                { provide: ThemeService, useClass: MockThemeService },
+                { provide: WebSocketService, useClass: MockWebSocketService },
+            ]
+        });
+    });
+
+    it('should be created', inject([LoadingService], (service: LoadingService) => {
+        expect(service).toBeTruthy();
+    }));
 });
diff --git a/web/gui2/src/main/webapp/tests/app/fw/layer/panel.service.spec.ts b/web/gui2/src/main/webapp/tests/app/fw/layer/panel.service.spec.ts
index dfa760d..4ba7f69 100644
--- a/web/gui2/src/main/webapp/tests/app/fw/layer/panel.service.spec.ts
+++ b/web/gui2/src/main/webapp/tests/app/fw/layer/panel.service.spec.ts
@@ -16,18 +16,30 @@
 import { TestBed, inject } from '@angular/core/testing';
 
 import { PanelService } from '../../../../app/fw/layer/panel.service';
+import { LogService } from '../../../../app/log.service';
+import { ConsoleLoggerService } from '../../../../app/consolelogger.service';
+import { FnService } from '../../../../app/fw/util/fn.service';
+
+class MockFnService {}
 
 /**
  * ONOS GUI -- Layer -- Panel Service - Unit Tests
  */
 describe('PanelService', () => {
-  beforeEach(() => {
-    TestBed.configureTestingModule({
-      providers: [PanelService]
-    });
-  });
+    let log: LogService;
 
-  it('should be created', inject([PanelService], (service: PanelService) => {
-    expect(service).toBeTruthy();
-  }));
+    beforeEach(() => {
+        log = new ConsoleLoggerService();
+
+        TestBed.configureTestingModule({
+            providers: [PanelService,
+                { provide: LogService, useValue: log },
+                { provide: FnService, useClass: MockFnService },
+            ]
+        });
+    });
+
+    it('should be created', inject([PanelService], (service: PanelService) => {
+        expect(service).toBeTruthy();
+    }));
 });
diff --git a/web/gui2/src/main/webapp/tests/app/fw/layer/quickhelp.service.spec.ts b/web/gui2/src/main/webapp/tests/app/fw/layer/quickhelp.service.spec.ts
index 19ce774..fa8f8ea 100644
--- a/web/gui2/src/main/webapp/tests/app/fw/layer/quickhelp.service.spec.ts
+++ b/web/gui2/src/main/webapp/tests/app/fw/layer/quickhelp.service.spec.ts
@@ -15,19 +15,43 @@
  */
 import { TestBed, inject } from '@angular/core/testing';
 
+import { LogService } from '../../../../app/log.service';
+import { ConsoleLoggerService } from '../../../../app/consolelogger.service';
 import { QuickHelpService } from '../../../../app/fw/layer/quickhelp.service';
+import { FnService } from '../../../../app/fw/util/fn.service';
+import { LionService } from '../../../../app/fw/util/lion.service';
+import { LoadingService } from '../../../../app/fw/layer/loading.service';
+import { SvgUtilService } from '../../../../app/fw/svg/svgutil.service';
+
+class MockFnService {}
+
+class MockLionService {}
+
+class MockLoadingService {}
+
+class MockSvgUtilService {}
 
 /**
  * ONOS GUI -- Layer -- Quick Help Service - Unit Tests
  */
 describe('QuickHelpService', () => {
-  beforeEach(() => {
-    TestBed.configureTestingModule({
-      providers: [QuickHelpService]
-    });
-  });
+    let log: LogService;
 
-  it('should be created', inject([QuickHelpService], (service: QuickHelpService) => {
-    expect(service).toBeTruthy();
-  }));
+    beforeEach(() => {
+        log = new ConsoleLoggerService();
+
+        TestBed.configureTestingModule({
+            providers: [QuickHelpService,
+                { provide: LogService, useValue: log },
+                { provide: FnService, useClass: MockFnService },
+                { provide: LionService, useClass: MockLionService },
+                { provide: LoadingService, useClass: MockLoadingService },
+                { provide: SvgUtilService, useClass: MockSvgUtilService },
+            ]
+        });
+    });
+
+    it('should be created', inject([QuickHelpService], (service: QuickHelpService) => {
+        expect(service).toBeTruthy();
+    }));
 });
diff --git a/web/gui2/src/main/webapp/tests/app/fw/layer/veil.service.spec.ts b/web/gui2/src/main/webapp/tests/app/fw/layer/veil.service.spec.ts
index e99bf61..3d5509b 100644
--- a/web/gui2/src/main/webapp/tests/app/fw/layer/veil.service.spec.ts
+++ b/web/gui2/src/main/webapp/tests/app/fw/layer/veil.service.spec.ts
@@ -15,19 +15,43 @@
  */
 import { TestBed, inject } from '@angular/core/testing';
 
+import { LogService } from '../../../../app/log.service';
+import { ConsoleLoggerService } from '../../../../app/consolelogger.service';
+import { FnService } from '../../../../app/fw/util/fn.service';
+import { GlyphService } from '../../../../app/fw/svg/glyph.service';
+import { KeyService } from '../../../../app/fw/util/key.service';
 import { VeilService } from '../../../../app/fw/layer/veil.service';
+import { WebSocketService } from '../../../../app/fw/remote/websocket.service';
+
+class MockFnService {}
+
+class MockGlyphService {}
+
+class MockKeyService {}
+
+class MockWebSocketService {}
 
 /**
  * ONOS GUI -- Layer -- Veil Service - Unit Tests
  */
 describe('VeilService', () => {
-  beforeEach(() => {
-    TestBed.configureTestingModule({
-      providers: [VeilService]
-    });
-  });
+    let log: LogService;
 
-  it('should be created', inject([VeilService], (service: VeilService) => {
-    expect(service).toBeTruthy();
-  }));
+    beforeEach(() => {
+        log = new ConsoleLoggerService();
+
+        TestBed.configureTestingModule({
+            providers: [VeilService,
+                { provide: FnService, useClass: MockFnService },
+                { provide: GlyphService, useClass: MockGlyphService },
+                { provide: KeyService, useClass: MockKeyService },
+                { provide: LogService, useValue: log },
+                { provide: WebSocketService, useClass: MockWebSocketService },
+            ]
+        });
+    });
+
+    it('should be created', inject([VeilService], (service: VeilService) => {
+        expect(service).toBeTruthy();
+    }));
 });
diff --git a/web/gui2/src/main/webapp/tests/app/fw/mast/mast.service.spec.ts b/web/gui2/src/main/webapp/tests/app/fw/mast/mast.service.spec.ts
index 58eba10..5c00e67 100644
--- a/web/gui2/src/main/webapp/tests/app/fw/mast/mast.service.spec.ts
+++ b/web/gui2/src/main/webapp/tests/app/fw/mast/mast.service.spec.ts
@@ -16,18 +16,32 @@
 import { TestBed, inject } from '@angular/core/testing';
 
 import { MastService } from '../../../../app/fw/mast/mast.service';
+import { LogService } from '../../../../app/log.service';
+import { ConsoleLoggerService } from '../../../../app/consolelogger.service';
+import { FnService } from '../../../../app/fw/util/fn.service';
+
+class MockFnService {
+    isMobile() {}
+}
 
 /**
  * ONOS GUI -- Masthead Service - Unit Tests
  */
 describe('MastService', () => {
-  beforeEach(() => {
-    TestBed.configureTestingModule({
-      providers: [MastService]
-    });
-  });
+    let log: LogService;
 
-  it('should be created', inject([MastService], (service: MastService) => {
-    expect(service).toBeTruthy();
-  }));
+    beforeEach(() => {
+        log = new ConsoleLoggerService();
+
+        TestBed.configureTestingModule({
+            providers: [MastService,
+                { provide: FnService, useClass: MockFnService },
+                { provide: LogService, useValue: log },
+            ]
+        });
+    });
+
+    it('should be created', inject([MastService], (service: MastService) => {
+        expect(service).toBeTruthy();
+    }));
 });
diff --git a/web/gui2/src/main/webapp/tests/app/fw/mast/mast/mast.component.spec.ts b/web/gui2/src/main/webapp/tests/app/fw/mast/mast/mast.component.spec.ts
index 94f0f16..fe97527 100644
--- a/web/gui2/src/main/webapp/tests/app/fw/mast/mast/mast.component.spec.ts
+++ b/web/gui2/src/main/webapp/tests/app/fw/mast/mast/mast.component.spec.ts
@@ -15,29 +15,50 @@
  */
 import { async, ComponentFixture, TestBed } from '@angular/core/testing';
 
+import { LogService } from '../../../../../app/log.service';
+import { ConsoleLoggerService } from '../../../../../app/consolelogger.service';
 import { MastComponent } from '../../../../../app/fw/mast/mast/mast.component';
+import { IconComponent } from '../../../../../app/fw/svg/icon/icon.component';
+import { DialogService } from '../../../../../app/fw/layer/dialog.service';
+import { LionService } from '../../../../../app/fw/util/lion.service';
+import { IconService } from '../../../../../app/fw/svg/icon.service';
+import { NavService } from '../../../../../app/fw/nav/nav.service';
+import { WebSocketService } from '../../../../../app/fw/remote/websocket.service';
+
+class MockDialogService {}
+
+class MockLionService {}
+
+class MockNavService {}
+
+class MockWebSocketService {}
+
+class MockIconService {}
 
 /**
  * ONOS GUI -- Masthead Controller - Unit Tests
  */
 describe('MastComponent', () => {
-  let component: MastComponent;
-  let fixture: ComponentFixture<MastComponent>;
+    let log: LogService;
 
-  beforeEach(async(() => {
-    TestBed.configureTestingModule({
-      declarations: [ MastComponent ]
-    })
-    .compileComponents();
-  }));
+    beforeEach(() => {
+        log = new ConsoleLoggerService();
+        TestBed.configureTestingModule({
+            declarations: [ MastComponent, IconComponent ],
+            providers: [
+                { provide: DialogService, useClass: MockDialogService },
+                { provide: LionService, useClass: MockLionService },
+                { provide: LogService, useValue: log },
+                { provide: NavService, useClass: MockNavService },
+                { provide: WebSocketService, useClass: MockWebSocketService },
+                { provide: IconService, useClass: MockIconService },
+            ]
+        });
+    });
 
-  beforeEach(() => {
-    fixture = TestBed.createComponent(MastComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
+    it('should create', () => {
+        const fixture = TestBed.createComponent(MastComponent);
+        const component = fixture.componentInstance;
+        expect(component).toBeTruthy();
+    });
 });
diff --git a/web/gui2/src/main/webapp/tests/app/fw/nav/nav.service.spec.ts b/web/gui2/src/main/webapp/tests/app/fw/nav/nav.service.spec.ts
index 87df70a..44920df 100644
--- a/web/gui2/src/main/webapp/tests/app/fw/nav/nav.service.spec.ts
+++ b/web/gui2/src/main/webapp/tests/app/fw/nav/nav.service.spec.ts
@@ -15,19 +15,31 @@
  */
 import { TestBed, inject } from '@angular/core/testing';
 
+import { LogService } from '../../../../app/log.service';
+import { ConsoleLoggerService } from '../../../../app/consolelogger.service';
 import { NavService } from '../../../../app/fw/nav/nav.service';
+import { FnService } from '../../../../app/fw/util/fn.service';
+
+class MockFnService {}
 
 /**
  * ONOS GUI -- Util -- Navigation Service - Unit Tests
  */
 describe('NavService', () => {
-  beforeEach(() => {
-    TestBed.configureTestingModule({
-      providers: [NavService]
-    });
-  });
+    let log: LogService;
 
-  it('should be created', inject([NavService], (service: NavService) => {
-    expect(service).toBeTruthy();
-  }));
+    beforeEach(() => {
+        log = new ConsoleLoggerService();
+
+        TestBed.configureTestingModule({
+            providers: [NavService,
+                { provide: FnService, useClass: MockFnService },
+                { provide: LogService, useValue: log },
+            ]
+        });
+    });
+
+    it('should be created', inject([NavService], (service: NavService) => {
+        expect(service).toBeTruthy();
+    }));
 });
diff --git a/web/gui2/src/main/webapp/tests/app/fw/nav/nav/nav.component.spec.ts b/web/gui2/src/main/webapp/tests/app/fw/nav/nav/nav.component.spec.ts
index adff327..8d86c80 100644
--- a/web/gui2/src/main/webapp/tests/app/fw/nav/nav/nav.component.spec.ts
+++ b/web/gui2/src/main/webapp/tests/app/fw/nav/nav/nav.component.spec.ts
@@ -15,29 +15,38 @@
  */
 import { async, ComponentFixture, TestBed } from '@angular/core/testing';
 
+import { LogService } from '../../../../../app/log.service';
+import { ConsoleLoggerService } from '../../../../../app/consolelogger.service';
 import { NavComponent } from '../../../../../app/fw/nav/nav/nav.component';
+import { IconComponent } from '../../../../../app/fw/svg/icon/icon.component';
+import { IconService } from '../../../../../app/fw/svg/icon.service';
+import { NavService } from '../../../../../app/fw/nav/nav.service';
+
+class MockNavService {}
+
+class MockIconService {}
 
 /**
  * ONOS GUI -- Util -- Navigation Component - Unit Tests
  */
 describe('NavComponent', () => {
-  let component: NavComponent;
-  let fixture: ComponentFixture<NavComponent>;
+    let log: LogService;
 
-  beforeEach(async(() => {
-    TestBed.configureTestingModule({
-      declarations: [ NavComponent ]
-    })
-    .compileComponents();
-  }));
+    beforeEach(() => {
+        log = new ConsoleLoggerService();
+        TestBed.configureTestingModule({
+            declarations: [ NavComponent, IconComponent ],
+            providers: [
+                { provide: LogService, useValue: log },
+                { provide: IconService, useClass: MockIconService },
+                { provide: NavService, useClass: MockNavService },
+            ]
+        });
+    });
 
-  beforeEach(() => {
-    fixture = TestBed.createComponent(NavComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
+    it('should create', () => {
+        const fixture = TestBed.createComponent(NavComponent);
+        const component = fixture.componentInstance;
+        expect(component).toBeTruthy();
+    });
 });
diff --git a/web/gui2/src/main/webapp/tests/app/fw/remote/rest.service.spec.ts b/web/gui2/src/main/webapp/tests/app/fw/remote/rest.service.spec.ts
index e88c522..45576f6 100644
--- a/web/gui2/src/main/webapp/tests/app/fw/remote/rest.service.spec.ts
+++ b/web/gui2/src/main/webapp/tests/app/fw/remote/rest.service.spec.ts
@@ -15,19 +15,35 @@
  */
 import { TestBed, inject } from '@angular/core/testing';
 
+import { LogService } from '../../../../app/log.service';
+import { ConsoleLoggerService } from '../../../../app/consolelogger.service';
 import { RestService } from '../../../../app/fw/remote/rest.service';
+import { FnService } from '../../../../app/fw/util/fn.service';
+import { UrlFnService } from '../../../../app/fw/remote/urlfn.service';
+
+class MockFnService {}
+
+class MockUrlFnService {}
 
 /**
  * ONOS GUI -- Remote -- REST Service - Unit Tests
  */
 describe('RestService', () => {
-  beforeEach(() => {
-    TestBed.configureTestingModule({
-      providers: [RestService]
-    });
-  });
+    let log: LogService;
 
-  it('should be created', inject([RestService], (service: RestService) => {
-    expect(service).toBeTruthy();
-  }));
+    beforeEach(() => {
+        log = new ConsoleLoggerService();
+
+        TestBed.configureTestingModule({
+            providers: [RestService,
+                { provide: FnService, useClass: MockFnService },
+                { provide: LogService, useValue: log },
+                { provide: UrlFnService, useClass: MockUrlFnService },
+            ]
+        });
+    });
+
+    it('should be created', inject([RestService], (service: RestService) => {
+        expect(service).toBeTruthy();
+    }));
 });
diff --git a/web/gui2/src/main/webapp/tests/app/fw/remote/urlfn.service.spec.ts b/web/gui2/src/main/webapp/tests/app/fw/remote/urlfn.service.spec.ts
index 5891260..a54458b 100644
--- a/web/gui2/src/main/webapp/tests/app/fw/remote/urlfn.service.spec.ts
+++ b/web/gui2/src/main/webapp/tests/app/fw/remote/urlfn.service.spec.ts
@@ -15,19 +15,29 @@
  */
 import { TestBed, inject } from '@angular/core/testing';
 
+import { LogService } from '../../../../app/log.service';
+import { ConsoleLoggerService } from '../../../../app/consolelogger.service';
 import { UrlFnService } from '../../../../app/fw/remote/urlfn.service';
 
 /**
  * ONOS GUI -- Remote -- General Functions - Unit Tests
  */
 describe('UrlFnService', () => {
-  beforeEach(() => {
-    TestBed.configureTestingModule({
-      providers: [UrlFnService]
-    });
-  });
+    let log: LogService;
+    const windowMock = <any>{ location: <any> { hostname: 'localhost' } };
 
-  it('should be created', inject([UrlFnService], (service: UrlFnService) => {
-    expect(service).toBeTruthy();
-  }));
+    beforeEach(() => {
+        log = new ConsoleLoggerService();
+
+        TestBed.configureTestingModule({
+            providers: [UrlFnService,
+                { provide: LogService, useValue: log },
+                { provide: Window, useValue: windowMock },
+            ]
+        });
+    });
+
+    it('should be created', inject([UrlFnService], (service: UrlFnService) => {
+        expect(service).toBeTruthy();
+    }));
 });
diff --git a/web/gui2/src/main/webapp/tests/app/fw/remote/websocket.service.spec.ts b/web/gui2/src/main/webapp/tests/app/fw/remote/websocket.service.spec.ts
index 7f448a8..d18dda4 100644
--- a/web/gui2/src/main/webapp/tests/app/fw/remote/websocket.service.spec.ts
+++ b/web/gui2/src/main/webapp/tests/app/fw/remote/websocket.service.spec.ts
@@ -15,19 +15,45 @@
  */
 import { TestBed, inject } from '@angular/core/testing';
 
+import { LogService } from '../../../../app/log.service';
+import { ConsoleLoggerService } from '../../../../app/consolelogger.service';
 import { WebSocketService } from '../../../../app/fw/remote/websocket.service';
+import { FnService } from '../../../../app/fw/util/fn.service';
+import { GlyphService } from '../../../../app/fw/svg/glyph.service';
+import { UrlFnService } from '../../../../app/fw/remote/urlfn.service';
+import { WSock } from '../../../../app/fw/remote/wsock.service';
+
+class MockFnService {}
+
+class MockGlyphService {}
+
+class MockUrlFnService {}
+
+class MockWSock {}
 
 /**
  * ONOS GUI -- Remote -- Web Socket Service - Unit Tests
  */
 describe('WebSocketService', () => {
-  beforeEach(() => {
-    TestBed.configureTestingModule({
-      providers: [WebSocketService]
-    });
-  });
+    let log: LogService;
+    const windowMock = <any>{ location: <any> { hostname: 'localhost' } };
 
-  it('should be created', inject([WebSocketService], (service: WebSocketService) => {
-    expect(service).toBeTruthy();
-  }));
+    beforeEach(() => {
+        log = new ConsoleLoggerService();
+
+        TestBed.configureTestingModule({
+            providers: [WebSocketService,
+                { provide: FnService, useClass: MockFnService },
+                { provide: LogService, useValue: log },
+                { provide: GlyphService, useClass: MockGlyphService },
+                { provide: UrlFnService, useClass: MockUrlFnService },
+                { provide: WSock, useClass: MockWSock },
+                { provide: Window, useValue: windowMock },
+            ]
+        });
+    });
+
+    it('should be created', inject([WebSocketService], (service: WebSocketService) => {
+        expect(service).toBeTruthy();
+    }));
 });
diff --git a/web/gui2/src/main/webapp/tests/app/fw/remote/wsock.service.spec.ts b/web/gui2/src/main/webapp/tests/app/fw/remote/wsock.service.spec.ts
index 0dcfce8..61d5ab4 100644
--- a/web/gui2/src/main/webapp/tests/app/fw/remote/wsock.service.spec.ts
+++ b/web/gui2/src/main/webapp/tests/app/fw/remote/wsock.service.spec.ts
@@ -15,19 +15,27 @@
  */
 import { TestBed, inject } from '@angular/core/testing';
 
+import { LogService } from '../../../../app/log.service';
+import { ConsoleLoggerService } from '../../../../app/consolelogger.service';
 import { WSock } from '../../../../app/fw/remote/wsock.service';
 
 /**
  * ONOS GUI -- Remote -- WSock Service - Unit Tests
  */
 describe('WSock', () => {
-  beforeEach(() => {
-    TestBed.configureTestingModule({
-      providers: [WSock]
-    });
-  });
+    let log: LogService;
 
-  it('should be created', inject([WSock], (service: WSock) => {
-    expect(service).toBeTruthy();
-  }));
+    beforeEach(() => {
+        log = new ConsoleLoggerService();
+
+        TestBed.configureTestingModule({
+            providers: [WSock,
+                { provide: LogService, useValue: log },
+            ]
+        });
+    });
+
+    it('should be created', inject([WSock], (service: WSock) => {
+        expect(service).toBeTruthy();
+    }));
 });
diff --git a/web/gui2/src/main/webapp/tests/app/fw/svg/geodata.service.spec.ts b/web/gui2/src/main/webapp/tests/app/fw/svg/geodata.service.spec.ts
index 3acc8fe..3057897 100644
--- a/web/gui2/src/main/webapp/tests/app/fw/svg/geodata.service.spec.ts
+++ b/web/gui2/src/main/webapp/tests/app/fw/svg/geodata.service.spec.ts
@@ -15,19 +15,31 @@
  */
 import { TestBed, inject } from '@angular/core/testing';
 
+import { LogService } from '../../../../app/log.service';
+import { ConsoleLoggerService } from '../../../../app/consolelogger.service';
 import { GeoDataService } from '../../../../app/fw/svg/geodata.service';
+import { FnService } from '../../../../app/fw/util/fn.service';
+
+class MockFnService {}
 
 /**
  * ONOS GUI -- SVG -- GeoData Service - Unit Tests
  */
 describe('GeoDataService', () => {
-  beforeEach(() => {
-    TestBed.configureTestingModule({
-      providers: [GeoDataService]
-    });
-  });
+    let log: LogService;
 
-  it('should be created', inject([GeoDataService], (service: GeoDataService) => {
-    expect(service).toBeTruthy();
-  }));
+    beforeEach(() => {
+        log = new ConsoleLoggerService();
+
+        TestBed.configureTestingModule({
+            providers: [GeoDataService,
+                { provide: FnService, useClass: MockFnService },
+                { provide: LogService, useValue: log },
+            ]
+        });
+    });
+
+    it('should be created', inject([GeoDataService], (service: GeoDataService) => {
+        expect(service).toBeTruthy();
+    }));
 });
diff --git a/web/gui2/src/main/webapp/tests/app/fw/svg/glyph.service.spec.ts b/web/gui2/src/main/webapp/tests/app/fw/svg/glyph.service.spec.ts
index 53ac558..538cd9f 100644
--- a/web/gui2/src/main/webapp/tests/app/fw/svg/glyph.service.spec.ts
+++ b/web/gui2/src/main/webapp/tests/app/fw/svg/glyph.service.spec.ts
@@ -15,19 +15,31 @@
  */
 import { TestBed, inject } from '@angular/core/testing';
 
+import { LogService } from '../../../../app/log.service';
+import { ConsoleLoggerService } from '../../../../app/consolelogger.service';
 import { GlyphService } from '../../../../app/fw/svg/glyph.service';
+import { FnService } from '../../../../app/fw/util/fn.service';
+
+class MockFnService {}
 
 /**
  * ONOS GUI -- SVG -- Glyph Service - Unit Tests
  */
 describe('GlyphService', () => {
-  beforeEach(() => {
-    TestBed.configureTestingModule({
-      providers: [GlyphService]
-    });
-  });
+    let log: LogService;
 
-  it('should be created', inject([GlyphService], (service: GlyphService) => {
-    expect(service).toBeTruthy();
-  }));
+    beforeEach(() => {
+        log = new ConsoleLoggerService();
+
+        TestBed.configureTestingModule({
+            providers: [GlyphService,
+                { provide: FnService, useClass: MockFnService },
+                { provide: LogService, useValue: log },
+            ]
+        });
+    });
+
+    it('should be created', inject([GlyphService], (service: GlyphService) => {
+        expect(service).toBeTruthy();
+    }));
 });
diff --git a/web/gui2/src/main/webapp/tests/app/fw/svg/glyphdata.service.spec.ts b/web/gui2/src/main/webapp/tests/app/fw/svg/glyphdata.service.spec.ts
index de6ddf2..5fbf137 100644
--- a/web/gui2/src/main/webapp/tests/app/fw/svg/glyphdata.service.spec.ts
+++ b/web/gui2/src/main/webapp/tests/app/fw/svg/glyphdata.service.spec.ts
@@ -15,19 +15,27 @@
  */
 import { TestBed, inject } from '@angular/core/testing';
 
+import { LogService } from '../../../../app/log.service';
+import { ConsoleLoggerService } from '../../../../app/consolelogger.service';
 import { GlyphDataService } from '../../../../app/fw/svg/glyphdata.service';
 
 /**
  * ONOS GUI -- SVG -- Glyph Data Service - Unit Tests
  */
 describe('GlyphDataService', () => {
-  beforeEach(() => {
-    TestBed.configureTestingModule({
-      providers: [GlyphDataService]
-    });
-  });
+    let log: LogService;
 
-  it('should be created', inject([GlyphDataService], (service: GlyphDataService) => {
-    expect(service).toBeTruthy();
-  }));
+    beforeEach(() => {
+        log = new ConsoleLoggerService();
+
+        TestBed.configureTestingModule({
+            providers: [GlyphDataService,
+                { provide: LogService, useValue: log },
+            ]
+        });
+    });
+
+    it('should be created', inject([GlyphDataService], (service: GlyphDataService) => {
+        expect(service).toBeTruthy();
+    }));
 });
diff --git a/web/gui2/src/main/webapp/tests/app/fw/svg/icon.directive.spec.ts b/web/gui2/src/main/webapp/tests/app/fw/svg/icon.directive.spec.ts
index f00b8ca..4c5c252 100644
--- a/web/gui2/src/main/webapp/tests/app/fw/svg/icon.directive.spec.ts
+++ b/web/gui2/src/main/webapp/tests/app/fw/svg/icon.directive.spec.ts
@@ -13,55 +13,50 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
-import { IconDirective } from '../../../../app/fw/svg/icon.directive';
+import { TestBed, inject } from '@angular/core/testing';
+
+import { ElementRef } from '@angular/core';
 import { LogService } from '../../../../app/log.service';
+import { ConsoleLoggerService } from '../../../../app/consolelogger.service';
+import { IconDirective } from '../../../../app/fw/svg/icon.directive';
 import { IconService } from '../../../../app/fw/svg/icon.service';
 import { GlyphService } from '../../../../app/fw/svg/glyph.service';
 import { SvgUtilService } from '../../../../app/fw/svg/svgutil.service';
 import { FnService } from '../../../../app/fw//util/fn.service';
 import { ActivatedRoute, Router} from '@angular/router';
 
-class MockGlyphService extends GlyphService {
-    // Override things as necessary
-}
+class MockFnService {}
 
-class MockSvgUtilService extends SvgUtilService {
-    // Override things as necessary
-}
+class MockGlyphService {}
 
-class MockFunctionService extends FnService {
-    // Override things as necessary
-}
+class MockIconService {}
 
 /**
  * ONOS GUI -- SVG -- Icon Directive - Unit Tests
  */
 describe('IconDirective', () => {
-    let ar: ActivatedRoute;
     let log: LogService;
-    let fs: MockFunctionService;
-    let gs: GlyphService;
-    let is: IconService;
-    let sus: SvgUtilService;
-    let directive: IconDirective;
+    const elementMock = <any>{ };
 
     beforeEach(() => {
-        ar = new ActivatedRoute();
-        log = new LogService();
-        fs = new MockFunctionService(ar, log);
-        sus = new MockSvgUtilService(fs, log);
-        gs = new GlyphService(log);
-        is = new IconService(gs, log, sus);
-        directive = new IconDirective(is, log);
+        log = new ConsoleLoggerService();
+
+        TestBed.configureTestingModule({
+            providers: [ IconDirective,
+                { provide: FnService, useClass: MockFnService },
+                { provide: LogService, useValue: log },
+                { provide: ElementRef, useValue: elementMock },
+                { provide: GlyphService, useClass: MockGlyphService },
+                { provide: IconService, useClass: MockIconService },
+            ]
+        });
     });
 
     afterEach(() => {
-        is = null;
         log = null;
-        directive = null;
     });
 
-    it('should create an instance', () => {
+    it('should create an instance', inject([IconDirective], (directive: IconDirective) => {
         expect(directive).toBeTruthy();
-    });
+    }));
 });
diff --git a/web/gui2/src/main/webapp/tests/app/fw/svg/icon.service.spec.ts b/web/gui2/src/main/webapp/tests/app/fw/svg/icon.service.spec.ts
index 47bef85..e6e54dc 100644
--- a/web/gui2/src/main/webapp/tests/app/fw/svg/icon.service.spec.ts
+++ b/web/gui2/src/main/webapp/tests/app/fw/svg/icon.service.spec.ts
@@ -15,19 +15,36 @@
  */
 import { TestBed, inject } from '@angular/core/testing';
 
+import { LogService } from '../../../../app/log.service';
+import { ConsoleLoggerService } from '../../../../app/consolelogger.service';
 import { IconService } from '../../../../app/fw/svg/icon.service';
+import { GlyphService } from '../../../../app/fw/svg/glyph.service';
+import { SvgUtilService } from '../../../../app/fw/svg/svgutil.service';
+
+class MockGlyphService {}
+
+class MockSvgUtilService {}
 
 /**
  * ONOS GUI -- SVG -- Icon Service - Unit Tests
  */
 describe('IconService', () => {
-  beforeEach(() => {
-    TestBed.configureTestingModule({
-      providers: [IconService]
-    });
-  });
 
-  it('should be created', inject([IconService], (service: IconService) => {
-    expect(service).toBeTruthy();
-  }));
+    let log: LogService;
+
+    beforeEach(() => {
+        log = new ConsoleLoggerService();
+
+        TestBed.configureTestingModule({
+            providers: [IconService,
+                { provide: LogService, useValue: log },
+                { provide: GlyphService, useClass: MockGlyphService },
+                { provide: SvgUtilService, useClass: MockSvgUtilService },
+            ]
+        });
+    });
+
+    it('should be created', inject([IconService], (service: IconService) => {
+        expect(service).toBeTruthy();
+    }));
 });
diff --git a/web/gui2/src/main/webapp/tests/app/fw/svg/icon/icon.component.spec.ts b/web/gui2/src/main/webapp/tests/app/fw/svg/icon/icon.component.spec.ts
index 84cd80a..3ca58e3 100644
--- a/web/gui2/src/main/webapp/tests/app/fw/svg/icon/icon.component.spec.ts
+++ b/web/gui2/src/main/webapp/tests/app/fw/svg/icon/icon.component.spec.ts
@@ -1,25 +1,30 @@
 import { async, ComponentFixture, TestBed } from '@angular/core/testing';
 
+import { LogService } from '../../../../../app/log.service';
+import { ConsoleLoggerService } from '../../../../../app/consolelogger.service';
 import { IconComponent } from '../../../../../app/fw/svg/icon/icon.component';
+import { IconService } from '../../../../../app/fw/svg/icon.service';
+
+class MockIconService {}
 
 describe('IconComponent', () => {
-  let component: IconComponent;
-  let fixture: ComponentFixture<IconComponent>;
+    let log: LogService;
 
-  beforeEach(async(() => {
-    TestBed.configureTestingModule({
-      declarations: [ IconComponent ]
-    })
-    .compileComponents();
-  }));
+    beforeEach(() => {
+        log = new ConsoleLoggerService();
 
-  beforeEach(() => {
-    fixture = TestBed.createComponent(IconComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
+        TestBed.configureTestingModule({
+            declarations: [ IconComponent ],
+            providers: [
+                { provide: LogService, useValue: log },
+                { provide: IconService, useClass: MockIconService },
+            ]
+        });
+    });
 
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
+    it('should create', () => {
+        const fixture = TestBed.createComponent(IconComponent);
+        const component = fixture.componentInstance;
+        expect(component).toBeTruthy();
+    });
 });
diff --git a/web/gui2/src/main/webapp/tests/app/fw/svg/map.service.spec.ts b/web/gui2/src/main/webapp/tests/app/fw/svg/map.service.spec.ts
index d5c3cd1..347db99 100644
--- a/web/gui2/src/main/webapp/tests/app/fw/svg/map.service.spec.ts
+++ b/web/gui2/src/main/webapp/tests/app/fw/svg/map.service.spec.ts
@@ -15,19 +15,31 @@
  */
 import { TestBed, inject } from '@angular/core/testing';
 
+import { LogService } from '../../../../app/log.service';
+import { ConsoleLoggerService } from '../../../../app/consolelogger.service';
 import { MapService } from '../../../../app/fw/svg/map.service';
+import { GlyphDataService } from '../../../../app/fw/svg/glyphdata.service';
+
+class MockGlyphDataService {}
 
 /**
  * ONOS GUI -- SVG -- Map Service - Unit Tests
  */
 describe('MapService', () => {
-  beforeEach(() => {
-    TestBed.configureTestingModule({
-      providers: [MapService]
-    });
-  });
+    let log: LogService;
 
-  it('should be created', inject([MapService], (service: MapService) => {
-    expect(service).toBeTruthy();
-  }));
+    beforeEach(() => {
+        log = new ConsoleLoggerService();
+
+        TestBed.configureTestingModule({
+            providers: [MapService,
+                { provide: LogService, useValue: log },
+                { provide: GlyphDataService, useClass: MockGlyphDataService },
+            ]
+        });
+    });
+
+    it('should be created', inject([MapService], (service: MapService) => {
+        expect(service).toBeTruthy();
+    }));
 });
diff --git a/web/gui2/src/main/webapp/tests/app/fw/svg/sprite.service.spec.ts b/web/gui2/src/main/webapp/tests/app/fw/svg/sprite.service.spec.ts
index 8996b4f..9c352c9 100644
--- a/web/gui2/src/main/webapp/tests/app/fw/svg/sprite.service.spec.ts
+++ b/web/gui2/src/main/webapp/tests/app/fw/svg/sprite.service.spec.ts
@@ -15,19 +15,27 @@
  */
 import { TestBed, inject } from '@angular/core/testing';
 
+import { LogService } from '../../../../app/log.service';
+import { ConsoleLoggerService } from '../../../../app/consolelogger.service';
 import { SpriteService } from '../../../../app/fw/svg/sprite.service';
 
 /**
  * ONOS GUI -- SVG -- Sprite Service - Unit Tests
  */
 describe('SpriteService', () => {
-  beforeEach(() => {
-    TestBed.configureTestingModule({
-      providers: [SpriteService]
-    });
-  });
+    let log: LogService;
 
-  it('should be created', inject([SpriteService], (service: SpriteService) => {
-    expect(service).toBeTruthy();
-  }));
+    beforeEach(() => {
+        log = new ConsoleLoggerService();
+
+        TestBed.configureTestingModule({
+            providers: [SpriteService,
+                { provide: LogService, useValue: log },
+            ]
+        });
+    });
+
+    it('should be created', inject([SpriteService], (service: SpriteService) => {
+        expect(service).toBeTruthy();
+    }));
 });
diff --git a/web/gui2/src/main/webapp/tests/app/fw/svg/spritedata.service.spec.ts b/web/gui2/src/main/webapp/tests/app/fw/svg/spritedata.service.spec.ts
index 1d14006..0e20c85 100644
--- a/web/gui2/src/main/webapp/tests/app/fw/svg/spritedata.service.spec.ts
+++ b/web/gui2/src/main/webapp/tests/app/fw/svg/spritedata.service.spec.ts
@@ -15,19 +15,27 @@
  */
 import { TestBed, inject } from '@angular/core/testing';
 
+import { LogService } from '../../../../app/log.service';
+import { ConsoleLoggerService } from '../../../../app/consolelogger.service';
 import { SpriteDataService } from '../../../../app/fw/svg/spritedata.service';
 
 /**
  * ONOS GUI -- SVG -- Sprite Data Service - Unit Tests
  */
 describe('SpriteDataService', () => {
-  beforeEach(() => {
-    TestBed.configureTestingModule({
-      providers: [SpriteDataService]
-    });
-  });
+    let log: LogService;
 
-  it('should be created', inject([SpriteDataService], (service: SpriteDataService) => {
-    expect(service).toBeTruthy();
-  }));
+    beforeEach(() => {
+        log = new ConsoleLoggerService();
+
+        TestBed.configureTestingModule({
+            providers: [SpriteDataService,
+                { provide: LogService, useValue: log },
+            ]
+        });
+    });
+
+    it('should be created', inject([SpriteDataService], (service: SpriteDataService) => {
+        expect(service).toBeTruthy();
+    }));
 });
diff --git a/web/gui2/src/main/webapp/tests/app/fw/svg/svgutil.service.spec.ts b/web/gui2/src/main/webapp/tests/app/fw/svg/svgutil.service.spec.ts
index 8d4a21e..593f5ad 100644
--- a/web/gui2/src/main/webapp/tests/app/fw/svg/svgutil.service.spec.ts
+++ b/web/gui2/src/main/webapp/tests/app/fw/svg/svgutil.service.spec.ts
@@ -15,19 +15,31 @@
  */
 import { TestBed, inject } from '@angular/core/testing';
 
+import { LogService } from '../../../../app/log.service';
+import { ConsoleLoggerService } from '../../../../app/consolelogger.service';
 import { SvgUtilService } from '../../../../app/fw/svg/svgutil.service';
+import { FnService } from '../../../../app/fw/util/fn.service';
+
+class MockFnService {}
 
 /**
  * ONOS GUI -- SVG -- Svg Util Service - Unit Tests
  */
 describe('SvgUtilService', () => {
-  beforeEach(() => {
-    TestBed.configureTestingModule({
-      providers: [SvgUtilService]
-    });
-  });
+    let log: LogService;
 
-  it('should be created', inject([SvgUtilService], (service: SvgUtilService) => {
-    expect(service).toBeTruthy();
-  }));
+    beforeEach(() => {
+        log = new ConsoleLoggerService();
+
+        TestBed.configureTestingModule({
+            providers: [SvgUtilService,
+                { provide: LogService, useValue: log },
+                { provide: FnService, useClass: MockFnService },
+            ]
+        });
+    });
+
+    it('should be created', inject([SvgUtilService], (service: SvgUtilService) => {
+        expect(service).toBeTruthy();
+    }));
 });
diff --git a/web/gui2/src/main/webapp/tests/app/fw/svg/zoom.service.spec.ts b/web/gui2/src/main/webapp/tests/app/fw/svg/zoom.service.spec.ts
index 4016500..360ff41 100644
--- a/web/gui2/src/main/webapp/tests/app/fw/svg/zoom.service.spec.ts
+++ b/web/gui2/src/main/webapp/tests/app/fw/svg/zoom.service.spec.ts
@@ -15,19 +15,27 @@
  */
 import { TestBed, inject } from '@angular/core/testing';
 
+import { LogService } from '../../../../app/log.service';
+import { ConsoleLoggerService } from '../../../../app/consolelogger.service';
 import { ZoomService } from '../../../../app/fw/svg/zoom.service';
 
 /**
  * ONOS GUI -- SVG -- Zoom Service - Unit Tests
  */
 describe('ZoomService', () => {
-  beforeEach(() => {
-    TestBed.configureTestingModule({
-      providers: [ZoomService]
-    });
-  });
+    let log: LogService;
 
-  it('should be created', inject([ZoomService], (service: ZoomService) => {
-    expect(service).toBeTruthy();
-  }));
+    beforeEach(() => {
+        log = new ConsoleLoggerService();
+
+        TestBed.configureTestingModule({
+            providers: [ZoomService,
+                { provide: LogService, useValue: log },
+            ]
+        });
+    });
+
+    it('should be created', inject([ZoomService], (service: ZoomService) => {
+        expect(service).toBeTruthy();
+    }));
 });
diff --git a/web/gui2/src/main/webapp/tests/app/fw/util/ee.service.spec.ts b/web/gui2/src/main/webapp/tests/app/fw/util/ee.service.spec.ts
index 157e2bc..90c00d0 100644
--- a/web/gui2/src/main/webapp/tests/app/fw/util/ee.service.spec.ts
+++ b/web/gui2/src/main/webapp/tests/app/fw/util/ee.service.spec.ts
@@ -15,19 +15,27 @@
  */
 import { TestBed, inject } from '@angular/core/testing';
 
+import { LogService } from '../../../../app/log.service';
+import { ConsoleLoggerService } from '../../../../app/consolelogger.service';
 import { EeService } from '../../../../app/fw/util/ee.service';
 
 /**
  * ONOS GUI -- Util -- EE functions - Unit Tests
  */
 describe('EeService', () => {
-  beforeEach(() => {
-    TestBed.configureTestingModule({
-      providers: [EeService]
-    });
-  });
+    let log: LogService;
 
-  it('should be created', inject([EeService], (service: EeService) => {
-    expect(service).toBeTruthy();
-  }));
+    beforeEach(() => {
+        log = new ConsoleLoggerService();
+
+        TestBed.configureTestingModule({
+            providers: [EeService,
+                { provide: LogService, useValue: log },
+            ]
+        });
+    });
+
+    it('should be created', inject([EeService], (service: EeService) => {
+        expect(service).toBeTruthy();
+    }));
 });
diff --git a/web/gui2/src/main/webapp/tests/app/fw/util/fn.service.spec.ts b/web/gui2/src/main/webapp/tests/app/fw/util/fn.service.spec.ts
index c07e858..ff6ceaf 100644
--- a/web/gui2/src/main/webapp/tests/app/fw/util/fn.service.spec.ts
+++ b/web/gui2/src/main/webapp/tests/app/fw/util/fn.service.spec.ts
@@ -15,19 +15,39 @@
  */
 import { TestBed, inject } from '@angular/core/testing';
 
+import { LogService } from '../../../../app/log.service';
+import { ConsoleLoggerService } from '../../../../app/consolelogger.service';
 import { FnService } from '../../../../app/fw/util/fn.service';
+import { ActivatedRoute, Params } from '@angular/router';
+import { of } from 'rxjs';
+
+class MockActivatedRoute extends ActivatedRoute {
+    constructor(params: Params) {
+        super();
+        this.queryParams = of(params);
+    }
+}
 
 /**
  * ONOS GUI -- Util -- General Purpose Functions - Unit Tests
  */
 describe('FnService', () => {
-  beforeEach(() => {
-    TestBed.configureTestingModule({
-      providers: [FnService]
-    });
-  });
+    let log: LogService;
+    let ar: ActivatedRoute;
 
-  it('should be created', inject([FnService], (service: FnService) => {
-    expect(service).toBeTruthy();
-  }));
+    beforeEach(() => {
+        log = new ConsoleLoggerService();
+        ar = new MockActivatedRoute({'debug': 'TestService'});
+
+        TestBed.configureTestingModule({
+            providers: [FnService,
+                { provide: LogService, useValue: log },
+                { provide: ActivatedRoute, useValue: ar },
+            ]
+        });
+    });
+
+    it('should be created', inject([FnService], (service: FnService) => {
+        expect(service).toBeTruthy();
+    }));
 });
diff --git a/web/gui2/src/main/webapp/tests/app/fw/util/key.service.spec.ts b/web/gui2/src/main/webapp/tests/app/fw/util/key.service.spec.ts
index c277344..7ceadb8 100644
--- a/web/gui2/src/main/webapp/tests/app/fw/util/key.service.spec.ts
+++ b/web/gui2/src/main/webapp/tests/app/fw/util/key.service.spec.ts
@@ -15,19 +15,31 @@
  */
 import { TestBed, inject } from '@angular/core/testing';
 
+import { LogService } from '../../../../app/log.service';
+import { ConsoleLoggerService } from '../../../../app/consolelogger.service';
 import { KeyService } from '../../../../app/fw/util/key.service';
+import { FnService } from '../../../../app/fw/util/fn.service';
+
+class MockFnService {}
 
 /**
  * ONOS GUI -- Key Handler Service - Unit Tests
  */
 describe('KeyService', () => {
-  beforeEach(() => {
-    TestBed.configureTestingModule({
-      providers: [KeyService]
-    });
-  });
+    let log: LogService;
 
-  it('should be created', inject([KeyService], (service: KeyService) => {
-    expect(service).toBeTruthy();
-  }));
+    beforeEach(() => {
+        log = new ConsoleLoggerService();
+
+        TestBed.configureTestingModule({
+            providers: [KeyService,
+                { provide: LogService, useValue: log },
+                { provide: FnService, useClass: MockFnService },
+            ]
+        });
+    });
+
+    it('should be created', inject([KeyService], (service: KeyService) => {
+        expect(service).toBeTruthy();
+    }));
 });
diff --git a/web/gui2/src/main/webapp/tests/app/fw/util/lion.service.spec.ts b/web/gui2/src/main/webapp/tests/app/fw/util/lion.service.spec.ts
index fc8c4fc..d471005 100644
--- a/web/gui2/src/main/webapp/tests/app/fw/util/lion.service.spec.ts
+++ b/web/gui2/src/main/webapp/tests/app/fw/util/lion.service.spec.ts
@@ -16,19 +16,31 @@
  */
 import { TestBed, inject } from '@angular/core/testing';
 
+import { LogService } from '../../../../app/log.service';
+import { ConsoleLoggerService } from '../../../../app/consolelogger.service';
 import { LionService } from '../../../../app/fw/util/lion.service';
+import { WebSocketService } from '../../../../app/fw/remote/websocket.service';
+
+class MockWebSocketService {}
 
 /**
  * ONOS GUI -- Lion -- Localization Utilities - Unit Tests
  */
 describe('LionService', () => {
-  beforeEach(() => {
-    TestBed.configureTestingModule({
-      providers: [LionService]
-    });
-  });
+    let log: LogService;
 
-  it('should be created', inject([LionService], (service: LionService) => {
-    expect(service).toBeTruthy();
-  }));
+    beforeEach(() => {
+        log = new ConsoleLoggerService();
+
+        TestBed.configureTestingModule({
+            providers: [LionService,
+                { provide: LogService, useValue: log },
+                { provide: WebSocketService, useClass: MockWebSocketService },
+            ]
+        });
+    });
+
+    it('should be created', inject([LionService], (service: LionService) => {
+        expect(service).toBeTruthy();
+    }));
 });
diff --git a/web/gui2/src/main/webapp/tests/app/fw/util/prefs.service.spec.ts b/web/gui2/src/main/webapp/tests/app/fw/util/prefs.service.spec.ts
index b27662f..0aeed99 100644
--- a/web/gui2/src/main/webapp/tests/app/fw/util/prefs.service.spec.ts
+++ b/web/gui2/src/main/webapp/tests/app/fw/util/prefs.service.spec.ts
@@ -15,19 +15,35 @@
  */
 import { TestBed, inject } from '@angular/core/testing';
 
+import { LogService } from '../../../../app/log.service';
+import { ConsoleLoggerService } from '../../../../app/consolelogger.service';
 import { PrefsService } from '../../../../app/fw/util/prefs.service';
+import { FnService } from '../../../../app/fw/util/fn.service';
+import { WebSocketService } from '../../../../app/fw/remote/websocket.service';
+
+class MockFnService {}
+
+class MockWebSocketService {}
 
 /**
- ONOS GUI -- Util -- User Preference Service - Unit Tests
+ * ONOS GUI -- Util -- User Preference Service - Unit Tests
  */
 describe('PrefsService', () => {
-  beforeEach(() => {
-    TestBed.configureTestingModule({
-      providers: [PrefsService]
-    });
-  });
+    let log: LogService;
 
-  it('should be created', inject([PrefsService], (service: PrefsService) => {
-    expect(service).toBeTruthy();
-  }));
+    beforeEach(() => {
+        log = new ConsoleLoggerService();
+
+        TestBed.configureTestingModule({
+            providers: [PrefsService,
+                { provide: LogService, useValue: log },
+                { provide: FnService, useClass: MockFnService },
+                { provide: WebSocketService, useClass: MockWebSocketService },
+            ]
+        });
+    });
+
+    it('should be created', inject([PrefsService], (service: PrefsService) => {
+        expect(service).toBeTruthy();
+    }));
 });
diff --git a/web/gui2/src/main/webapp/tests/app/fw/util/random.service.spec.ts b/web/gui2/src/main/webapp/tests/app/fw/util/random.service.spec.ts
index 969ad69..726fc92 100644
--- a/web/gui2/src/main/webapp/tests/app/fw/util/random.service.spec.ts
+++ b/web/gui2/src/main/webapp/tests/app/fw/util/random.service.spec.ts
@@ -15,19 +15,31 @@
  */
 import { TestBed, inject } from '@angular/core/testing';
 
+import { LogService } from '../../../../app/log.service';
+import { ConsoleLoggerService } from '../../../../app/consolelogger.service';
 import { RandomService } from '../../../../app/fw/util/random.service';
+import { FnService } from '../../../../app/fw/util/fn.service';
+
+class MockFnService {}
 
 /**
  * ONOS GUI -- Random -- Encapsulated randomness - Unit Tests
  */
 describe('RandomService', () => {
-  beforeEach(() => {
-    TestBed.configureTestingModule({
-      providers: [RandomService]
-    });
-  });
+    let log: LogService;
 
-  it('should be created', inject([RandomService], (service: RandomService) => {
-    expect(service).toBeTruthy();
-  }));
+    beforeEach(() => {
+        log = new ConsoleLoggerService();
+
+        TestBed.configureTestingModule({
+            providers: [RandomService,
+                { provide: LogService, useValue: log },
+                { provide: FnService, useClass: MockFnService },
+            ]
+        });
+    });
+
+    it('should be created', inject([RandomService], (service: RandomService) => {
+        expect(service).toBeTruthy();
+    }));
 });
diff --git a/web/gui2/src/main/webapp/tests/app/fw/util/theme.service.spec.ts b/web/gui2/src/main/webapp/tests/app/fw/util/theme.service.spec.ts
index b5a1ff8..f69cc5b 100644
--- a/web/gui2/src/main/webapp/tests/app/fw/util/theme.service.spec.ts
+++ b/web/gui2/src/main/webapp/tests/app/fw/util/theme.service.spec.ts
@@ -15,19 +15,27 @@
  */
 import { TestBed, inject } from '@angular/core/testing';
 
+import { LogService } from '../../../../app/log.service';
+import { ConsoleLoggerService } from '../../../../app/consolelogger.service';
 import { ThemeService } from '../../../../app/fw/util/theme.service';
 
 /**
  * ONOS GUI -- Util -- Theme Service - Unit Tests
  */
 describe('ThemeService', () => {
-  beforeEach(() => {
-    TestBed.configureTestingModule({
-      providers: [ThemeService]
-    });
-  });
+    let log: LogService;
 
-  it('should be created', inject([ThemeService], (service: ThemeService) => {
-    expect(service).toBeTruthy();
-  }));
+    beforeEach(() => {
+        log = new ConsoleLoggerService();
+
+        TestBed.configureTestingModule({
+            providers: [ThemeService,
+                { provide: LogService, useValue: log },
+            ]
+        });
+    });
+
+    it('should be created', inject([ThemeService], (service: ThemeService) => {
+        expect(service).toBeTruthy();
+    }));
 });
diff --git a/web/gui2/src/main/webapp/tests/app/fw/widget/button.service.spec.ts b/web/gui2/src/main/webapp/tests/app/fw/widget/button.service.spec.ts
index d2bb5b9..cc8113b 100644
--- a/web/gui2/src/main/webapp/tests/app/fw/widget/button.service.spec.ts
+++ b/web/gui2/src/main/webapp/tests/app/fw/widget/button.service.spec.ts
@@ -15,19 +15,39 @@
  */
 import { TestBed, inject } from '@angular/core/testing';
 
+import { LogService } from '../../../../app/log.service';
+import { ConsoleLoggerService } from '../../../../app/consolelogger.service';
 import { ButtonService } from '../../../../app/fw/widget/button.service';
+import { FnService } from '../../../../app/fw/util/fn.service';
+import { IconService } from '../../../../app/fw/svg/icon.service';
+import { TooltipService } from '../../../../app/fw/widget/tooltip.service';
+
+class MockIconService {}
+
+class MockFnService {}
+
+class MockTooltipService {}
 
 /**
  * ONOS GUI -- Widget -- Button Service - Unit Tests
  */
 describe('ButtonService', () => {
-  beforeEach(() => {
-    TestBed.configureTestingModule({
-      providers: [ButtonService]
-    });
-  });
+    let log: LogService;
 
-  it('should be created', inject([ButtonService], (service: ButtonService) => {
-    expect(service).toBeTruthy();
-  }));
+    beforeEach(() => {
+        log = new ConsoleLoggerService();
+
+        TestBed.configureTestingModule({
+            providers: [ButtonService,
+                { provide: LogService, useValue: log },
+                { provide: IconService, useClass: MockIconService },
+                { provide: FnService, useClass: MockFnService },
+                { provide: TooltipService, useClass: MockTooltipService },
+            ]
+        });
+    });
+
+    it('should be created', inject([ButtonService], (service: ButtonService) => {
+        expect(service).toBeTruthy();
+    }));
 });
diff --git a/web/gui2/src/main/webapp/tests/app/fw/widget/chartbuilder.service.spec.ts b/web/gui2/src/main/webapp/tests/app/fw/widget/chartbuilder.service.spec.ts
index 6840fe3..dbb806d 100644
--- a/web/gui2/src/main/webapp/tests/app/fw/widget/chartbuilder.service.spec.ts
+++ b/web/gui2/src/main/webapp/tests/app/fw/widget/chartbuilder.service.spec.ts
@@ -15,19 +15,39 @@
  */
 import { TestBed, inject } from '@angular/core/testing';
 
+import { LogService } from '../../../../app/log.service';
+import { ConsoleLoggerService } from '../../../../app/consolelogger.service';
 import { ChartBuilderService } from '../../../../app/fw/widget/chartbuilder.service';
+import { LoadingService } from '../../../../app/fw/layer/loading.service';
+import { FnService } from '../../../../app/fw/util/fn.service';
+import { WebSocketService } from '../../../../app/fw/remote/websocket.service';
+
+class MockFnService {}
+
+class MockLoadingService {}
+
+class MockWebSocketService {}
 
 /**
  * ONOS GUI -- Widget -- Chart Builder Service - Unit Tests
  */
 describe('ChartBuilderService', () => {
-  beforeEach(() => {
-    TestBed.configureTestingModule({
-      providers: [ChartBuilderService]
-    });
-  });
+    let log: LogService;
 
-  it('should be created', inject([ChartBuilderService], (service: ChartBuilderService) => {
-    expect(service).toBeTruthy();
-  }));
+    beforeEach(() => {
+        log = new ConsoleLoggerService();
+
+        TestBed.configureTestingModule({
+            providers: [ChartBuilderService,
+                { provide: LogService, useValue: log },
+                { provide: FnService, useClass: MockFnService },
+                { provide: LoadingService, useClass: MockLoadingService },
+                { provide: WebSocketService, useClass: MockWebSocketService },
+            ]
+        });
+    });
+
+    it('should be created', inject([ChartBuilderService], (service: ChartBuilderService) => {
+        expect(service).toBeTruthy();
+    }));
 });
diff --git a/web/gui2/src/main/webapp/tests/app/fw/widget/flashchanges.directive.spec.ts b/web/gui2/src/main/webapp/tests/app/fw/widget/flashchanges.directive.spec.ts
index f301cfc..fd87910 100644
--- a/web/gui2/src/main/webapp/tests/app/fw/widget/flashchanges.directive.spec.ts
+++ b/web/gui2/src/main/webapp/tests/app/fw/widget/flashchanges.directive.spec.ts
@@ -13,40 +13,37 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import { FlashChangesDirective } from '../../../../app/fw/widget/flashchanges.directive';
+import { TestBed, inject } from '@angular/core/testing';
 
 import { LogService } from '../../../../app/log.service';
+import { ConsoleLoggerService } from '../../../../app/consolelogger.service';
+import { FlashChangesDirective } from '../../../../app/fw/widget/flashchanges.directive';
 import { FnService } from '../../../../app/fw/util/fn.service';
-import { ActivatedRoute, Router} from '@angular/router';
 
-class MockFunctionService extends FnService {
-    // Override things as necessary
-}
+class MockFnService {}
 
 /**
  * ONOS GUI -- Widget -- Table Flash Changes Directive - Unit Tests
  */
 describe('FlashChangesDirective', () => {
-    let fs: MockFunctionService;
     let log: LogService;
-    let ar: ActivatedRoute;
-    let directive: FlashChangesDirective;
 
     beforeEach(() => {
-        log = new LogService();
-        ar = new ActivatedRoute();
-        fs = new MockFunctionService(ar, log);
-        directive = new FlashChangesDirective(fs, log);
+        log = new ConsoleLoggerService();
+
+        TestBed.configureTestingModule({
+            providers: [ FlashChangesDirective,
+                { provide: FnService, useClass: MockFnService },
+                { provide: LogService, useValue: log },
+            ]
+        });
     });
 
     afterEach(() => {
-        fs = null;
         log = null;
-        ar = null;
-        directive = null;
     });
 
-    it('should create an instance', () => {
+    it('should create an instance', inject([FlashChangesDirective], (directive: FlashChangesDirective) => {
         expect(directive).toBeTruthy();
-    });
+    }));
 });
diff --git a/web/gui2/src/main/webapp/tests/app/fw/widget/list.service.spec.ts b/web/gui2/src/main/webapp/tests/app/fw/widget/list.service.spec.ts
index 0285417..7380270 100644
--- a/web/gui2/src/main/webapp/tests/app/fw/widget/list.service.spec.ts
+++ b/web/gui2/src/main/webapp/tests/app/fw/widget/list.service.spec.ts
@@ -15,19 +15,27 @@
  */
 import { TestBed, inject } from '@angular/core/testing';
 
+import { LogService } from '../../../../app/log.service';
+import { ConsoleLoggerService } from '../../../../app/consolelogger.service';
 import { ListService } from '../../../../app/fw/widget/list.service';
 
 /**
  * ONOS GUI -- Widget -- List Service - Unit Tests
  */
 describe('ListService', () => {
-  beforeEach(() => {
-    TestBed.configureTestingModule({
-      providers: [ListService]
-    });
-  });
+    let log: LogService;
 
-  it('should be created', inject([ListService], (service: ListService) => {
-    expect(service).toBeTruthy();
-  }));
+    beforeEach(() => {
+        log = new ConsoleLoggerService();
+
+        TestBed.configureTestingModule({
+            providers: [ListService,
+                { provide: LogService, useValue: log },
+            ]
+        });
+    });
+
+    it('should be created', inject([ListService], (service: ListService) => {
+        expect(service).toBeTruthy();
+    }));
 });
diff --git a/web/gui2/src/main/webapp/tests/app/fw/widget/sortableheader.directive.spec.ts b/web/gui2/src/main/webapp/tests/app/fw/widget/sortableheader.directive.spec.ts
index 7d15dfc..993430b 100644
--- a/web/gui2/src/main/webapp/tests/app/fw/widget/sortableheader.directive.spec.ts
+++ b/web/gui2/src/main/webapp/tests/app/fw/widget/sortableheader.directive.spec.ts
@@ -13,55 +13,45 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+import { TestBed, inject } from '@angular/core/testing';
+
+import { LogService } from '../../../../app/log.service';
+import { ConsoleLoggerService } from '../../../../app/consolelogger.service';
 import { SortableHeaderDirective } from '../../../../app/fw/widget/sortableheader.directive';
 import { IconService } from '../../../../app/fw/svg/icon.service';
 import { GlyphService } from '../../../../app/fw/svg/glyph.service';
-import { SvgUtilService } from '../../../../app/fw/svg/svgutil.service';
-import { LogService } from '../../../../app/log.service';
 import { FnService } from '../../../../app/fw/util/fn.service';
-import { ActivatedRoute, Router} from '@angular/router';
 
-class MockGlyphService extends GlyphService {
-    // Override things as necessary
-}
+class MockFnService {}
 
-class MockSvgUtilService extends SvgUtilService {
-    // Override things as necessary
-}
+class MockGlyphService {}
 
-class MockFunctionService extends FnService {
-    // Override things as necessary
-}
+class MockIconService {}
 
 /**
  * ONOS GUI -- Widget -- Table Sortable Header Directive - Unit Tests
  */
 describe('SortableHeaderDirective', () => {
-    let gs: MockGlyphService;
-    let sus: MockSvgUtilService;
-    let icon: IconService;
     let log: LogService;
-    let fs: MockFunctionService;
-    let ar: ActivatedRoute;
-    let directive: SortableHeaderDirective;
 
     beforeEach(() => {
-        log = new LogService();
-        ar = new ActivatedRoute();
-        fs = new MockFunctionService(ar, log);
-        gs = new MockGlyphService(log);
-        sus = new MockSvgUtilService(fs, log);
-        icon = new IconService(gs, log, sus);
-        directive = new SortableHeaderDirective(icon, log);
+        log = new ConsoleLoggerService();
+
+        TestBed.configureTestingModule({
+            providers: [ SortableHeaderDirective,
+                { provide: FnService, useClass: MockFnService },
+                { provide: LogService, useValue: log },
+                { provide: GlyphService, useClass: MockGlyphService },
+                { provide: IconService, useClass: MockIconService },
+            ]
+        });
     });
 
     afterEach(() => {
         log = null;
-        icon = null;
-        directive = null;
     });
 
-    it('should create an instance', () => {
+    it('should create an instance', inject([SortableHeaderDirective], (directive: SortableHeaderDirective) => {
         expect(directive).toBeTruthy();
-    });
+    }));
 });
diff --git a/web/gui2/src/main/webapp/tests/app/fw/widget/tablebuilder.service.spec.ts b/web/gui2/src/main/webapp/tests/app/fw/widget/tablebuilder.service.spec.ts
index fb4aac7..1126d28 100644
--- a/web/gui2/src/main/webapp/tests/app/fw/widget/tablebuilder.service.spec.ts
+++ b/web/gui2/src/main/webapp/tests/app/fw/widget/tablebuilder.service.spec.ts
@@ -15,19 +15,40 @@
  */
 import { TestBed, inject } from '@angular/core/testing';
 
+import { LogService } from '../../../../app/log.service';
+import { ConsoleLoggerService } from '../../../../app/consolelogger.service';
 import { TableBuilderService } from '../../../../app/fw/widget/tablebuilder.service';
+import { FnService } from '../../../../app/fw//util/fn.service';
+import { LoadingService } from '../../../../app/fw/layer/loading.service';
+import { WebSocketService } from '../../../../app/fw/remote/websocket.service';
+
+class MockFnService {}
+
+class MockLoadingService {}
+
+class MockWebSocketService {}
 
 /*
  ONOS GUI -- Widget -- Table Builder Service - Unit Tests
  */
 describe('TableBuilderService', () => {
-  beforeEach(() => {
-    TestBed.configureTestingModule({
-      providers: [TableBuilderService]
-    });
-  });
+    let log: LogService;
 
-  it('should be created', inject([TableBuilderService], (service: TableBuilderService) => {
-    expect(service).toBeTruthy();
-  }));
+    beforeEach(() => {
+        log = new ConsoleLoggerService();
+
+        TestBed.configureTestingModule({
+            providers: [TableBuilderService,
+                { provide: FnService, useClass: MockFnService },
+                { provide: LoadingService, useClass: MockLoadingService },
+                { provide: LogService, useValue: log },
+                { provide: WebSocketService, useClass: MockWebSocketService },
+
+            ]
+        });
+    });
+
+    it('should be created', inject([TableBuilderService], (service: TableBuilderService) => {
+        expect(service).toBeTruthy();
+    }));
 });
diff --git a/web/gui2/src/main/webapp/tests/app/fw/widget/tabledetail.service.spec.ts b/web/gui2/src/main/webapp/tests/app/fw/widget/tabledetail.service.spec.ts
index 5df608c..8854413e 100644
--- a/web/gui2/src/main/webapp/tests/app/fw/widget/tabledetail.service.spec.ts
+++ b/web/gui2/src/main/webapp/tests/app/fw/widget/tabledetail.service.spec.ts
@@ -15,19 +15,31 @@
  */
 import { TestBed, inject } from '@angular/core/testing';
 
+import { LogService } from '../../../../app/log.service';
+import { ConsoleLoggerService } from '../../../../app/consolelogger.service';
 import { TableDetailService } from '../../../../app/fw/widget/tabledetail.service';
+import { FnService } from '../../../../app/fw/util/fn.service';
+
+class MockFnService {}
 
 /**
  * ONOS GUI -- Widget -- Table Detail Service - Unit Tests
  */
 describe('TableDetailService', () => {
-  beforeEach(() => {
-    TestBed.configureTestingModule({
-      providers: [TableDetailService]
-    });
-  });
+    let log: LogService;
 
-  it('should be created', inject([TableDetailService], (service: TableDetailService) => {
-    expect(service).toBeTruthy();
-  }));
+    beforeEach(() => {
+        log = new ConsoleLoggerService();
+
+        TestBed.configureTestingModule({
+            providers: [TableDetailService,
+                { provide: LogService, useValue: log },
+                { provide: FnService, useClass: MockFnService },
+            ]
+        });
+    });
+
+    it('should be created', inject([TableDetailService], (service: TableDetailService) => {
+        expect(service).toBeTruthy();
+    }));
 });
diff --git a/web/gui2/src/main/webapp/tests/app/fw/widget/tableresize.directive.spec.ts b/web/gui2/src/main/webapp/tests/app/fw/widget/tableresize.directive.spec.ts
index a8241ea..3fa6fe0 100644
--- a/web/gui2/src/main/webapp/tests/app/fw/widget/tableresize.directive.spec.ts
+++ b/web/gui2/src/main/webapp/tests/app/fw/widget/tableresize.directive.spec.ts
@@ -13,44 +13,41 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+import { TestBed, inject } from '@angular/core/testing';
+
 import { TableResizeDirective } from '../../../../app/fw/widget/tableresize.directive';
 import { LogService } from '../../../../app/log.service';
+import { ConsoleLoggerService } from '../../../../app/consolelogger.service';
 import { FnService } from '../../../../app/fw/util/fn.service';
 import { MastService } from '../../../../app/fw/mast/mast.service';
-import { ActivatedRoute, Router} from '@angular/router';
 
-class MockFunctionService extends FnService {
-    // Override things as necessary
-}
+class MockFnService {}
+
+class MockMastService {}
 
 /**
  * ONOS GUI -- Widget -- Table Resize Directive - Unit Tests
  */
 describe('TableResizeDirective', () => {
-
-    let fs: MockFunctionService;
     let log: LogService;
-    let ar: ActivatedRoute;
-    let ms: MastService;
-    let directive: TableResizeDirective;
 
     beforeEach(() => {
-        log = new LogService();
-        ar = new ActivatedRoute();
-        fs = new MockFunctionService(ar, log);
-        ms = new MastService(fs, log);
-        directive = new TableResizeDirective(fs, log, ms);
+        log = new ConsoleLoggerService();
+
+        TestBed.configureTestingModule({
+            providers: [ TableResizeDirective,
+                { provide: FnService, useClass: MockFnService },
+                { provide: LogService, useValue: log },
+                { provide: MastService, useClass: MockMastService },
+            ]
+        });
     });
 
     afterEach(() => {
-        fs = null;
         log = null;
-        ar = null;
-        ms = null;
-        directive = null;
     });
 
-    it('should create an instance', () => {
+    it('should create an instance', inject([TableResizeDirective], (directive: TableResizeDirective) => {
         expect(directive).toBeTruthy();
-    });
+    }));
 });
diff --git a/web/gui2/src/main/webapp/tests/app/fw/widget/toolbar.service.spec.ts b/web/gui2/src/main/webapp/tests/app/fw/widget/toolbar.service.spec.ts
index 467462a..522586f 100644
--- a/web/gui2/src/main/webapp/tests/app/fw/widget/toolbar.service.spec.ts
+++ b/web/gui2/src/main/webapp/tests/app/fw/widget/toolbar.service.spec.ts
@@ -15,19 +15,43 @@
  */
 import { TestBed, inject } from '@angular/core/testing';
 
+import { LogService } from '../../../../app/log.service';
+import { ConsoleLoggerService } from '../../../../app/consolelogger.service';
 import { ToolbarService } from '../../../../app/fw/widget/toolbar.service';
+import { ButtonService } from '../../../../app/fw/widget/button.service';
+import { FnService } from '../../../../app/fw/util/fn.service';
+import { IconService } from '../../../../app/fw/svg/icon.service';
+import { PanelService } from '../../../../app/fw/layer/panel.service';
+
+class MockButtonService {}
+
+class MockIconService {}
+
+class MockFnService {}
+
+class MockPanelService {}
 
 /**
  * ONOS GUI -- Widget -- Toolbar Service - Unit Tests
  */
 describe('ToolbarService', () => {
-  beforeEach(() => {
-    TestBed.configureTestingModule({
-      providers: [ToolbarService]
-    });
-  });
+    let log: LogService;
 
-  it('should be created', inject([ToolbarService], (service: ToolbarService) => {
-    expect(service).toBeTruthy();
-  }));
+    beforeEach(() => {
+        log = new ConsoleLoggerService();
+
+        TestBed.configureTestingModule({
+            providers: [ToolbarService,
+                { provide: LogService, useValue: log },
+                { provide: ButtonService, useClass: MockButtonService },
+                { provide: IconService, useClass: MockIconService },
+                { provide: FnService, useClass: MockFnService },
+                { provide: PanelService, useClass: MockPanelService },
+            ]
+        });
+    });
+
+    it('should be created', inject([ToolbarService], (service: ToolbarService) => {
+        expect(service).toBeTruthy();
+    }));
 });
diff --git a/web/gui2/src/main/webapp/tests/app/fw/widget/tooltip.directive.spec.ts b/web/gui2/src/main/webapp/tests/app/fw/widget/tooltip.directive.spec.ts
index f8f41da..7445a05 100644
--- a/web/gui2/src/main/webapp/tests/app/fw/widget/tooltip.directive.spec.ts
+++ b/web/gui2/src/main/webapp/tests/app/fw/widget/tooltip.directive.spec.ts
@@ -13,39 +13,37 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+import { TestBed, inject } from '@angular/core/testing';
+
 import { TooltipDirective } from '../../../../app/fw/widget/tooltip.directive';
 import { LogService } from '../../../../app/log.service';
+import { ConsoleLoggerService } from '../../../../app/consolelogger.service';
 import { FnService } from '../../../../app/fw/util/fn.service';
-import { ActivatedRoute, Router} from '@angular/router';
 
-class MockFunctionService extends FnService {
-    // Override things as necessary
-}
+class MockFnService {}
 
 /**
  * ONOS GUI -- Widget -- Tooltip Directive - Unit Tests
  */
 describe('TooltipDirective', () => {
-    let fs: MockFunctionService;
     let log: LogService;
-    let ar: ActivatedRoute;
-    let directive: TooltipDirective;
 
     beforeEach(() => {
-        log = new LogService();
-        ar = new ActivatedRoute();
-        fs = new MockFunctionService(ar, log);
-        directive = new TooltipDirective(fs, log);
+        log = new ConsoleLoggerService();
+
+        TestBed.configureTestingModule({
+            providers: [ TooltipDirective,
+                { provide: FnService, useClass: MockFnService },
+                { provide: LogService, useValue: log },
+            ]
+        });
     });
 
     afterEach(() => {
-        fs = null;
         log = null;
-        ar = null;
-        directive = null;
     });
 
-    it('should create an instance', () => {
+    it('should create an instance', inject([TooltipDirective], (directive: TooltipDirective) => {
         expect(directive).toBeTruthy();
-    });
+    }));
 });
diff --git a/web/gui2/src/main/webapp/tests/app/fw/widget/tooltip.service.spec.ts b/web/gui2/src/main/webapp/tests/app/fw/widget/tooltip.service.spec.ts
index 651ef5d..98a5a18 100644
--- a/web/gui2/src/main/webapp/tests/app/fw/widget/tooltip.service.spec.ts
+++ b/web/gui2/src/main/webapp/tests/app/fw/widget/tooltip.service.spec.ts
@@ -15,19 +15,31 @@
  */
 import { TestBed, inject } from '@angular/core/testing';
 
+import { LogService } from '../../../../app/log.service';
+import { ConsoleLoggerService } from '../../../../app/consolelogger.service';
 import { TooltipService } from '../../../../app/fw/widget/tooltip.service';
+import { FnService } from '../../../../app/fw/util/fn.service';
+
+class MockFnService {}
 
 /**
  * ONOS GUI -- Widget -- Tooltip Service - Unit Tests
  */
 describe('TooltipService', () => {
-  beforeEach(() => {
-    TestBed.configureTestingModule({
-      providers: [TooltipService]
-    });
-  });
+    let log: LogService;
 
-  it('should be created', inject([TooltipService], (service: TooltipService) => {
-    expect(service).toBeTruthy();
-  }));
+    beforeEach(() => {
+        log = new ConsoleLoggerService();
+
+        TestBed.configureTestingModule({
+            providers: [TooltipService,
+                { provide: LogService, useValue: log },
+                { provide: FnService, useClass: MockFnService },
+            ]
+        });
+    });
+
+    it('should be created', inject([TooltipService], (service: TooltipService) => {
+        expect(service).toBeTruthy();
+    }));
 });
diff --git a/web/gui2/src/main/webapp/tests/app/onos.component.spec.ts b/web/gui2/src/main/webapp/tests/app/onos.component.spec.ts
index 1808eb6..d82bdc2 100644
--- a/web/gui2/src/main/webapp/tests/app/onos.component.spec.ts
+++ b/web/gui2/src/main/webapp/tests/app/onos.component.spec.ts
@@ -14,33 +14,107 @@
  * limitations under the License.
  */
 import { TestBed, async } from '@angular/core/testing';
+import { RouterModule, RouterOutlet, ChildrenOutletContexts } from '@angular/router';
+import { LogService } from '../../app/log.service';
+import { ConsoleLoggerService } from '../../app/consolelogger.service';
+import { IconComponent } from '../../app/fw/svg/icon/icon.component';
+import { MastComponent } from '../../app/fw/mast/mast/mast.component';
+import { NavComponent } from '../../app/fw/nav/nav/nav.component';
 import { OnosComponent } from '../../app/onos.component';
+import { DialogService } from '../../app/fw/layer/dialog.service';
+import { EeService } from '../../app/fw/util/ee.service';
+import { FlashService } from '../../app/fw/layer/flash.service';
+import { GlyphService } from '../../app/fw/svg/glyph.service';
+import { IconService } from '../../app/fw/svg/icon.service';
+import { KeyService } from '../../app/fw/util/key.service';
+import { LionService } from '../../app/fw/util/lion.service';
+import { NavService } from '../../app/fw/nav/nav.service';
+import { OnosService } from '../../app/onos.service';
+import { PanelService } from '../../app/fw/layer/panel.service';
+import { QuickHelpService } from '../../app/fw/layer/quickhelp.service';
+import { ThemeService } from '../../app/fw/util/theme.service';
+import { SpriteService } from '../../app/fw/svg/sprite.service';
+import { VeilService } from '../../app/fw/layer/veil.service';
+import { WebSocketService } from '../../app/fw/remote/websocket.service';
+
+class MockDialogService {}
+
+class MockEeService {}
+
+class MockFlashService {}
+
+class MockGlyphService {}
+
+class MockIconService {}
+
+class MockKeyService {}
+
+class MockLionService {}
+
+class MockNavService {}
+
+class MockOnosService {}
+
+class MockPanelService {}
+
+class MockQuickHelpService {}
+
+class MockSpriteService {}
+
+class MockThemeService {}
+
+class MockVeilService {}
+
+class MockWebSocketService {}
 
 /**
  * ONOS GUI -- Onos Component - Unit Tests
  */
 describe('OnosComponent', () => {
-  beforeEach(async(() => {
-    TestBed.configureTestingModule({
-      declarations: [
-        OnosComponent
-      ],
-    }).compileComponents();
-  }));
-  it('should create the app', async(() => {
-    const fixture = TestBed.createComponent(OnosComponent);
-    const app = fixture.debugElement.componentInstance;
-    expect(app).toBeTruthy();
-  }));
-  it(`should have as title 'onos'`, async(() => {
-    const fixture = TestBed.createComponent(OnosComponent);
-    const app = fixture.debugElement.componentInstance;
-    expect(app.title).toEqual('onos');
-  }));
-  it('should render title in a h1 tag', async(() => {
-    const fixture = TestBed.createComponent(OnosComponent);
-    fixture.detectChanges();
-    const compiled = fixture.debugElement.nativeElement;
-    expect(compiled.querySelector('h1').textContent).toContain('Welcome to onos!');
-  }));
+    let log: LogService;
+
+    beforeEach(async(() => {
+        log = new ConsoleLoggerService();
+
+        TestBed.configureTestingModule({
+            declarations: [
+                IconComponent,
+                MastComponent,
+                NavComponent,
+                OnosComponent,
+                RouterOutlet
+            ],
+            providers: [
+                { provide: ChildrenOutletContexts, useClass: ChildrenOutletContexts },
+                { provide: DialogService, useClass: MockDialogService },
+                { provide: EeService, useClass: MockEeService },
+                { provide: FlashService, useClass: MockFlashService },
+                { provide: GlyphService, useClass: MockGlyphService },
+                { provide: IconService, useClass: MockIconService },
+                { provide: KeyService, useClass: MockKeyService },
+                { provide: LionService, useClass: MockLionService },
+                { provide: LogService, useValue: log },
+                { provide: NavService, useClass: MockNavService },
+                { provide: OnosService, useClass: MockOnosService },
+                { provide: QuickHelpService, useClass: MockQuickHelpService },
+                { provide: PanelService, useClass: MockPanelService },
+                { provide: SpriteService, useClass: MockSpriteService },
+                { provide: ThemeService, useClass: MockThemeService },
+                { provide: VeilService, useClass: MockVeilService },
+                { provide: WebSocketService, useClass: MockWebSocketService },
+            ]
+        }).compileComponents();
+    }));
+
+    it('should create the app', async(() => {
+        const fixture = TestBed.createComponent(OnosComponent);
+        const app = fixture.debugElement.componentInstance;
+        expect(app).toBeTruthy();
+    }));
+
+    it(`should have as title 'onos'`, async(() => {
+        const fixture = TestBed.createComponent(OnosComponent);
+        const app = fixture.debugElement.componentInstance;
+        expect(app.title).toEqual('onos');
+    }));
 });
diff --git a/web/gui2/src/main/webapp/tests/app/onos.service.spec.ts b/web/gui2/src/main/webapp/tests/app/onos.service.spec.ts
index 867f14a..01d5aef 100644
--- a/web/gui2/src/main/webapp/tests/app/onos.service.spec.ts
+++ b/web/gui2/src/main/webapp/tests/app/onos.service.spec.ts
@@ -15,19 +15,27 @@
  */
 import { TestBed, inject } from '@angular/core/testing';
 
+import { LogService } from '../../app/log.service';
+import { ConsoleLoggerService } from '../../app/consolelogger.service';
 import { OnosService } from '../../app/onos.service';
 
 /**
  * ONOS GUI -- Onos Service - Unit Tests
  */
 describe('OnosService', () => {
-  beforeEach(() => {
-    TestBed.configureTestingModule({
-      providers: [OnosService]
-    });
-  });
+    let log: LogService;
 
-  it('should be created', inject([OnosService], (service: OnosService) => {
-    expect(service).toBeTruthy();
-  }));
+    beforeEach(() => {
+        log = new ConsoleLoggerService();
+
+        TestBed.configureTestingModule({
+            providers: [OnosService,
+                { provide: LogService, useValue: log },
+            ]
+        });
+    });
+
+    it('should be created', inject([OnosService], (service: OnosService) => {
+        expect(service).toBeTruthy();
+    }));
 });
diff --git a/web/gui2/src/main/webapp/tests/app/view/apps/apps.component.spec.ts b/web/gui2/src/main/webapp/tests/app/view/apps/apps.component.spec.ts
index f6ca0f8..a998cb0 100644
--- a/web/gui2/src/main/webapp/tests/app/view/apps/apps.component.spec.ts
+++ b/web/gui2/src/main/webapp/tests/app/view/apps/apps.component.spec.ts
@@ -1,25 +1,89 @@
+/*
+ * Copyright 2018-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 import { async, ComponentFixture, TestBed } from '@angular/core/testing';
 
+import { LogService } from '../../../../app/log.service';
+import { ConsoleLoggerService } from '../../../../app/consolelogger.service';
 import { AppsComponent } from '../../../../app/view/apps/apps.component';
+import { DialogService } from '../../../../app/fw/layer/dialog.service';
+import { FnService } from '../../../../app/fw/util/fn.service';
+import { IconService } from '../../../../app/fw/svg/icon.service';
+import { KeyService } from '../../../../app/fw/util/key.service';
+import { LionService } from '../../../../app/fw/util/lion.service';
+import { PanelService } from '../../../../app/fw/layer/panel.service';
+import { TableBuilderService } from '../../../../app/fw/widget/tablebuilder.service';
+import { UrlFnService } from '../../../../app/fw/remote/urlfn.service';
+import { WebSocketService } from '../../../../app/fw/remote/websocket.service';
 
+class MockDialogService {}
+
+class MockFnService {}
+
+class MockIconService {}
+
+class MockKeyService {}
+
+class MockLionService {}
+
+class MockPanelService {}
+
+class MockTableBuilderService {}
+
+class MockUrlFnService {}
+
+class MockWebSocketService {}
+
+/**
+ * ONOS GUI -- Apps View -- Unit Tests
+ */
 describe('AppsComponent', () => {
-  let component: AppsComponent;
-  let fixture: ComponentFixture<AppsComponent>;
+    let log: LogService;
+    let component: AppsComponent;
+    let fixture: ComponentFixture<AppsComponent>;
+    const windowMock = <any>{ location: <any> { hostname: 'localhost' } };
 
-  beforeEach(async(() => {
-    TestBed.configureTestingModule({
-      declarations: [ AppsComponent ]
-    })
-    .compileComponents();
-  }));
+    beforeEach(async(() => {
+        log = new ConsoleLoggerService();
 
-  beforeEach(() => {
-    fixture = TestBed.createComponent(AppsComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
+        TestBed.configureTestingModule({
+            declarations: [ AppsComponent ],
+            providers: [
+                { provide: DialogService, useClass: MockDialogService },
+                { provide: FnService, useClass: MockFnService },
+                { provide: IconService, useClass: MockIconService },
+                { provide: KeyService, useClass: MockKeyService },
+                { provide: LionService, useClass: MockLionService },
+                { provide: LogService, useValue: log },
+                { provide: PanelService, useClass: MockPanelService },
+                { provide: TableBuilderService, useClass: MockTableBuilderService },
+                { provide: UrlFnService, useClass: MockUrlFnService },
+                { provide: WebSocketService, useClass: MockWebSocketService },
+                { provide: Window, useValue: windowMock },
+            ]
+        })
+        .compileComponents();
+    }));
 
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
+    beforeEach(() => {
+        fixture = TestBed.createComponent(AppsComponent);
+        component = fixture.componentInstance;
+        fixture.detectChanges();
+    });
+
+    it('should create', () => {
+        expect(component).toBeTruthy();
+    });
 });
diff --git a/web/gui2/src/main/webapp/tests/app/view/apps/triggerform.directive.spec.ts b/web/gui2/src/main/webapp/tests/app/view/apps/triggerform.directive.spec.ts
index 6ec3d73..be1be65 100644
--- a/web/gui2/src/main/webapp/tests/app/view/apps/triggerform.directive.spec.ts
+++ b/web/gui2/src/main/webapp/tests/app/view/apps/triggerform.directive.spec.ts
@@ -1,8 +1,42 @@
+/*
+ * Copyright 2015-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import { TestBed, inject } from '@angular/core/testing';
+
+import { LogService } from '../../../../app/log.service';
+import { ConsoleLoggerService } from '../../../../app/consolelogger.service';
 import { TriggerFormDirective } from '../../../../app/view/apps/triggerform.directive';
 
 describe('TriggerFormDirective', () => {
-  it('should create an instance', () => {
-    const directive = new TriggerFormDirective();
-    expect(directive).toBeTruthy();
-  });
+    let log: LogService;
+
+    beforeEach(() => {
+        log = new ConsoleLoggerService();
+
+        TestBed.configureTestingModule({
+            providers: [ TriggerFormDirective,
+                { provide: LogService, useValue: log },
+            ]
+        });
+    });
+
+    afterEach(() => {
+        log = null;
+    });
+
+    it('should create an instance', inject([TriggerFormDirective], (directive: TriggerFormDirective) => {
+        expect(directive).toBeTruthy();
+    }));
 });
diff --git a/web/gui2/src/main/webapp/tests/app/view/device/device.component.spec.ts b/web/gui2/src/main/webapp/tests/app/view/device/device.component.spec.ts
index e4e06a1..edfaed4 100644
--- a/web/gui2/src/main/webapp/tests/app/view/device/device.component.spec.ts
+++ b/web/gui2/src/main/webapp/tests/app/view/device/device.component.spec.ts
@@ -15,29 +15,87 @@
  */
 import { async, ComponentFixture, TestBed } from '@angular/core/testing';
 
+import { LogService } from '../../../../app/log.service';
+import { ConsoleLoggerService } from '../../../../app/consolelogger.service';
 import { DeviceComponent } from '../../../../app/view/device/device.component';
+import { DetailsPanelService } from '../../../../app/fw/layer/detailspanel.service';
+import { FnService } from '../../../../app/fw/util/fn.service';
+import { IconService } from '../../../../app/fw/svg/icon.service';
+import { KeyService } from '../../../../app/fw/util/key.service';
+import { LoadingService } from '../../../../app/fw/layer/loading.service';
+import { NavService } from '../../../../app/fw/nav/nav.service';
+import { MastService } from '../../../../app/fw/mast/mast.service';
+import { PanelService } from '../../../../app/fw/layer/panel.service';
+import { TableBuilderService } from '../../../../app/fw/widget/tablebuilder.service';
+import { TableDetailService } from '../../../../app/fw/widget/tabledetail.service';
+import { WebSocketService } from '../../../../app/fw/remote/websocket.service';
+
+class MockDetailsPanelService {}
+
+class MockFnService {}
+
+class MockIconService {}
+
+class MockKeyService {}
+
+class MockLoadingService {
+    startAnim() {
+        // Do nothing
+    }
+}
+
+class MockNavService {}
+
+class MockMastService {}
+
+class MockPanelService {}
+
+class MockTableBuilderService {}
+
+class MockTableDetailService {}
+
+class MockWebSocketService {}
 
 /**
  * ONOS GUI -- Device View Module - Unit Tests
  */
 describe('DeviceComponent', () => {
-  let component: DeviceComponent;
-  let fixture: ComponentFixture<DeviceComponent>;
+    let log: LogService;
+    let component: DeviceComponent;
+    let fixture: ComponentFixture<DeviceComponent>;
+    const windowMock = <any>{ location: <any> { hostname: 'localhost' } };
 
-  beforeEach(async(() => {
-    TestBed.configureTestingModule({
-      declarations: [ DeviceComponent ]
-    })
-    .compileComponents();
-  }));
+    beforeEach(async(() => {
+        log = new ConsoleLoggerService();
 
-  beforeEach(() => {
-    fixture = TestBed.createComponent(DeviceComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
+        TestBed.configureTestingModule({
+            declarations: [ DeviceComponent ],
+            providers: [
+                { provide: DetailsPanelService, useClass: MockDetailsPanelService },
+                { provide: FnService, useClass: MockFnService },
+                { provide: IconService, useClass: MockIconService },
+                { provide: KeyService, useClass: MockKeyService },
+                { provide: LoadingService, useClass: MockLoadingService },
+                { provide: MastService, useClass: MockMastService },
+                { provide: NavService, useClass: MockNavService },
+                { provide: LogService, useValue: log },
+                { provide: PanelService, useClass: MockPanelService },
+                { provide: TableBuilderService, useClass: MockTableBuilderService },
+                { provide: TableDetailService, useClass: MockTableDetailService },
+                { provide: WebSocketService, useClass: MockWebSocketService },
+                { provide: Window, useValue: windowMock },
+             ]
+        })
+        .compileComponents();
+    }));
 
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
+    beforeEach(() => {
+        fixture = TestBed.createComponent(DeviceComponent);
+            component = fixture.componentInstance;
+        fixture.detectChanges();
+    });
+
+    it('should create', () => {
+        expect(component).toBeTruthy();
+    });
 });
diff --git a/web/gui2/src/main/webapp/tests/app/view/device/devicedetailspanel.directive.spec.ts b/web/gui2/src/main/webapp/tests/app/view/device/devicedetailspanel.directive.spec.ts
index bbf3062..83a7f78 100644
--- a/web/gui2/src/main/webapp/tests/app/view/device/devicedetailspanel.directive.spec.ts
+++ b/web/gui2/src/main/webapp/tests/app/view/device/devicedetailspanel.directive.spec.ts
@@ -13,47 +13,39 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+import { TestBed, inject } from '@angular/core/testing';
+
+import { LogService } from '../../../../app/log.service';
+import { ConsoleLoggerService } from '../../../../app/consolelogger.service';
 import { DeviceDetailsPanelDirective } from '../../../../app/view/device/devicedetailspanel.directive';
 import { KeyService } from '../../../../app/fw/util/key.service';
-import { LogService } from '../../../../app/log.service';
-import { FnService } from '../../../../app/fw/util/fn.service';
-import { ActivatedRoute, Router} from '@angular/router';
 
-class MockFunctionService extends FnService {
-    // Override things as necessary
-}
+class MockKeyService {}
 
-class MockKeyService extends KeyService {
-    // Override things as necessary
-}
 /**
  * ONOS GUI -- Device View Module - Unit Tests
  */
 describe('DeviceDetailsPanelDirective', () => {
-    let ar: ActivatedRoute;
     let log: LogService;
-    let ks: KeyService;
-    let fs: MockFunctionService;
-    let window: Window
-    let directive: DeviceDetailsPanelDirective;
+    const windowMock = <any>{ location: <any> { hostname: 'localhost' } };
 
     beforeEach(() => {
-        log = new LogService();
-        ar = new ActivatedRoute();
-        fs = new MockFunctionService(ar, log);
-        ks = new MockKeyService(fs, log);
-        directive = new DeviceDetailsPanelDirective(ks, log, window);
+        log = new ConsoleLoggerService();
+
+        TestBed.configureTestingModule({
+            providers: [ DeviceDetailsPanelDirective,
+                { provide: LogService, useValue: log },
+                { provide: KeyService, useClass: MockKeyService },
+                { provide: Window, useValue: windowMock },
+            ]
+        });
     });
 
     afterEach(() => {
-        fs = null;
-        ks = null;
         log = null;
-        ar = null;
-        directive = null;
     });
 
-    it('should create an instance', () => {
+    it('should create an instance', inject([DeviceDetailsPanelDirective], (directive: DeviceDetailsPanelDirective) => {
         expect(directive).toBeTruthy();
-    });
+    }));
 });