diff --git a/ui/angular/karma.conf.js b/ui/angular/karma.conf.js
index c092cab..9163b1e 100644
--- a/ui/angular/karma.conf.js
+++ b/ui/angular/karma.conf.js
@@ -29,7 +29,8 @@
       require('karma-chrome-launcher'),
       require('karma-jasmine-html-reporter'),
       require('karma-coverage-istanbul-reporter'),
-      require('@angular/cli/plugins/karma')
+      require('@angular/cli/plugins/karma'),
+      require('karma-spec-reporter')
     ],
     client: {
       clearContext: false // leave Jasmine Spec Runner output visible in browser
@@ -41,7 +42,7 @@
     angularCli: {
       environment: 'dev'
     },
-    reporters: ['progress', 'kjhtml'],
+    reporters: ['progress', 'kjhtml', 'spec'],
     port: 9876,
     colors: true,
     logLevel: config.LOG_INFO,
diff --git a/ui/angular/package.json b/ui/angular/package.json
index 91b5d16..f9d95fe 100644
--- a/ui/angular/package.json
+++ b/ui/angular/package.json
@@ -6,7 +6,7 @@
     "ng": "ng",
     "start": "ng serve",
     "build": "ng build",
-    "test": "ng test",
+    "test": "ng test -sm=false",
     "lint": "ng lint",
     "e2e": "ng e2e"
   },
@@ -60,6 +60,7 @@
     "karma-coverage-istanbul-reporter": "^1.2.1",
     "karma-jasmine": "~1.1.0",
     "karma-jasmine-html-reporter": "^0.2.2",
+    "karma-spec-reporter": "0.0.32",
     "protractor": "~5.1.2",
     "ts-node": "~3.2.0",
     "tslint": "~5.3.2",
diff --git a/ui/angular/src/app/app.component.spec.ts b/ui/angular/src/app/app.component.spec.ts
index 6b8dc79..769bf1c 100644
--- a/ui/angular/src/app/app.component.spec.ts
+++ b/ui/angular/src/app/app.component.spec.ts
@@ -19,12 +19,15 @@
 import {TestBed, async} from '@angular/core/testing';
 
 import {AppComponent} from './app.component';
+import { AppModule } from './app.module';
 
 describe('AppComponent', () => {
   beforeEach(async(() => {
     TestBed.configureTestingModule({
+      imports: [
+        AppModule
+      ],
       declarations: [
-        AppComponent
       ],
     }).compileComponents();
   }));
@@ -40,11 +43,4 @@
     const app = fixture.debugElement.componentInstance;
     expect(app.title).toEqual('app');
   }));
-
-  it('should render title in a h1 tag', async(() => {
-    const fixture = TestBed.createComponent(AppComponent);
-    fixture.detectChanges();
-    const compiled = fixture.debugElement.nativeElement;
-    expect(compiled.querySelector('h1').textContent).toContain('Welcome to app!');
-  }));
 });
diff --git a/ui/angular/src/app/dataasset/dataasset.component.spec.ts b/ui/angular/src/app/dataasset/dataasset.component.spec.ts
index b8d24fa..ae97bb5 100644
--- a/ui/angular/src/app/dataasset/dataasset.component.spec.ts
+++ b/ui/angular/src/app/dataasset/dataasset.component.spec.ts
@@ -16,7 +16,10 @@
 specific language governing permissions and limitations
 under the License.
 */
-import {async, ComponentFixture, TestBed} from '@angular/core/testing';
+import {async, ComponentFixture, TestBed, inject} from '@angular/core/testing';
+import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';
+import { AppModule } from '../app.module';
+import { ServiceService } from '../service/service.service';
 
 import {DataassetComponent} from './dataasset.component';
 
@@ -26,7 +29,9 @@
 
   beforeEach(async(() => {
     TestBed.configureTestingModule({
-      declarations: [DataassetComponent]
+      imports: [ HttpClientTestingModule, AppModule ],
+      declarations: [],
+      providers: [ ServiceService ]
     })
       .compileComponents();
   }));
@@ -37,7 +42,13 @@
     fixture.detectChanges();
   });
 
-  it('should be created', () => {
-    expect(component).toBeTruthy();
-  });
+  it(
+    'should be created', 
+    inject(
+      [HttpTestingController, ServiceService],
+      (httpMock: HttpTestingController, serviceService: ServiceService) => {
+        expect(component).toBeTruthy();
+      }
+    )
+  );
 });
diff --git a/ui/angular/src/app/health/health.component.spec.ts b/ui/angular/src/app/health/health.component.spec.ts
index 40c5198..d5adc5d 100644
--- a/ui/angular/src/app/health/health.component.spec.ts
+++ b/ui/angular/src/app/health/health.component.spec.ts
@@ -16,8 +16,11 @@
 specific language governing permissions and limitations
 under the License.
 */
-import {async, ComponentFixture, TestBed} from '@angular/core/testing';
+import {async, ComponentFixture, TestBed, inject} from '@angular/core/testing';
+import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';
 
+import { AppModule } from '../app.module';
+import { ServiceService } from '../service/service.service';
 import {HealthComponent} from './health.component';
 
 describe('HealthComponent', () => {
@@ -26,7 +29,9 @@
 
   beforeEach(async(() => {
     TestBed.configureTestingModule({
-      declarations: [HealthComponent]
+      imports: [ HttpClientTestingModule, AppModule ],
+      declarations: [],
+      providers: [ ServiceService ]
     })
       .compileComponents();
   }));
@@ -37,7 +42,18 @@
     fixture.detectChanges();
   });
 
-  it('should be created', () => {
-    expect(component).toBeTruthy();
-  });
+  it(
+    'should be created', 
+    inject(
+      [HttpTestingController, ServiceService],
+      (httpMock: HttpTestingController, serviceService: ServiceService) => {
+
+        const req = httpMock.expectOne( serviceService.config.uri.dashboard );
+        expect( req.request.method ).toBe("GET");
+        req.flush( [] );
+
+        expect(component).toBeTruthy();
+      }
+    )
+  );
 });
diff --git a/ui/angular/src/app/job/create-job/batch/batch.component.spec.ts b/ui/angular/src/app/job/create-job/batch/batch.component.spec.ts
index e166b78..479ce49 100644
--- a/ui/angular/src/app/job/create-job/batch/batch.component.spec.ts
+++ b/ui/angular/src/app/job/create-job/batch/batch.component.spec.ts
@@ -16,9 +16,12 @@
 specific language governing permissions and limitations
 under the License.
 */
-import {async, ComponentFixture, TestBed} from '@angular/core/testing';
+import {async, ComponentFixture, TestBed, inject} from '@angular/core/testing';
+import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';
 
+import { AppModule } from '../../../app.module';
 import {BatchComponent} from './batch.component';
+import { ServiceService } from '../../../service/service.service';
 
 describe('BatchComponent', () => {
   let component: BatchComponent;
@@ -26,7 +29,9 @@
 
   beforeEach(async(() => {
     TestBed.configureTestingModule({
-      declarations: [BatchComponent]
+      imports: [ HttpClientTestingModule, AppModule ],
+      declarations: [],
+      providers: [ ServiceService ]
     })
       .compileComponents();
   }));
@@ -37,7 +42,18 @@
     fixture.detectChanges();
   });
 
-  it('should be created', () => {
-    expect(component).toBeTruthy();
-  });
+  it(
+    'should be created', 
+    inject(
+      [HttpTestingController, ServiceService],
+      (httpMock: HttpTestingController, serviceService: ServiceService) => {
+
+        const allModelsReq = httpMock.expectOne( serviceService.config.uri.allModels + '?type=griffin' );
+        expect( allModelsReq.request.method ).toBe("GET");
+        allModelsReq.flush( [] );
+
+        expect(component).toBeTruthy();
+      }
+    )
+  );
 });
diff --git a/ui/angular/src/app/job/create-job/streaming/streaming.component.spec.ts b/ui/angular/src/app/job/create-job/streaming/streaming.component.spec.ts
index 69b3cf0..c2a17e5 100644
--- a/ui/angular/src/app/job/create-job/streaming/streaming.component.spec.ts
+++ b/ui/angular/src/app/job/create-job/streaming/streaming.component.spec.ts
@@ -16,9 +16,12 @@
 specific language governing permissions and limitations
 under the License.
 */
-import {async, ComponentFixture, TestBed} from '@angular/core/testing';
+import {async, ComponentFixture, TestBed, inject} from '@angular/core/testing';
+import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';
 
+import { AppModule } from '../../../app.module';
 import {StreamingComponent} from './streaming.component';
+import { ServiceService } from '../../../service/service.service';
 
 describe('StreamingComponent', () => {
   let component: StreamingComponent;
@@ -26,7 +29,9 @@
 
   beforeEach(async(() => {
     TestBed.configureTestingModule({
-      declarations: [StreamingComponent]
+      imports: [ HttpClientTestingModule, AppModule ],
+      declarations: [],
+      providers: [ ServiceService ]
     })
       .compileComponents();
   }));
@@ -37,7 +42,18 @@
     fixture.detectChanges();
   });
 
-  it('should be created', () => {
-    expect(component).toBeTruthy();
-  });
+  it(
+    'should be created', 
+    inject(
+      [HttpTestingController, ServiceService],
+      (httpMock: HttpTestingController, serviceService: ServiceService) => {
+
+        const allModelsReq = httpMock.expectOne( serviceService.config.uri.allModels + '?type=griffin' );
+        expect( allModelsReq.request.method ).toBe("GET");
+        allModelsReq.flush( [] );
+
+        expect(component).toBeTruthy();
+      }
+    )
+  );
 });
diff --git a/ui/angular/src/app/job/job-detail/job-detail.component.spec.ts b/ui/angular/src/app/job/job-detail/job-detail.component.spec.ts
index f998979..189d3e6 100644
--- a/ui/angular/src/app/job/job-detail/job-detail.component.spec.ts
+++ b/ui/angular/src/app/job/job-detail/job-detail.component.spec.ts
@@ -1,6 +1,27 @@
-import {async, ComponentFixture, TestBed} from '@angular/core/testing';
+/*
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you 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, inject} from '@angular/core/testing';
+import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';
+
+import { AppModule } from '../../app.module';
 import {JobDetailComponent} from './job-detail.component';
+import { ServiceService } from '../../service/service.service';
 
 describe('JobDetailComponent', () => {
   let component: JobDetailComponent;
@@ -8,7 +29,9 @@
 
   beforeEach(async(() => {
     TestBed.configureTestingModule({
-      declarations: [JobDetailComponent]
+      imports: [ HttpClientTestingModule, AppModule ],
+      declarations: [],
+      providers: [ ServiceService ]
     })
       .compileComponents();
   }));
@@ -19,7 +42,20 @@
     fixture.detectChanges();
   });
 
-  it('should be created', () => {
-    expect(component).toBeTruthy();
-  });
+  it(
+    'should be created',
+    inject(
+      [HttpTestingController, ServiceService],
+      (httpMock: HttpTestingController, serviceService: ServiceService) => {
+
+        const req = httpMock.expectOne( serviceService.config.uri.getJobById + "?jobId=" + null );
+        expect( req.request.method ).toBe("GET");
+        req.flush({
+          "data.segments": []
+        });
+
+        expect(component).toBeTruthy();
+      }
+    )
+  );
 });
diff --git a/ui/angular/src/app/job/job.component.spec.ts b/ui/angular/src/app/job/job.component.spec.ts
index a8c0ede..2a25f12 100644
--- a/ui/angular/src/app/job/job.component.spec.ts
+++ b/ui/angular/src/app/job/job.component.spec.ts
@@ -16,9 +16,12 @@
 specific language governing permissions and limitations
 under the License.
 */
-import {async, ComponentFixture, TestBed} from '@angular/core/testing';
+import {async, ComponentFixture, TestBed, inject} from '@angular/core/testing';
+import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';
 
+import { AppModule } from '../app.module';
 import {JobComponent} from './job.component';
+import { ServiceService } from '../service/service.service';
 
 describe('JobComponent', () => {
   let component: JobComponent;
@@ -26,7 +29,9 @@
 
   beforeEach(async(() => {
     TestBed.configureTestingModule({
-      declarations: [JobComponent]
+      imports: [ HttpClientTestingModule, AppModule ],
+      declarations: [],
+      providers: [ ServiceService ]
     })
       .compileComponents();
   }));
@@ -37,7 +42,18 @@
     fixture.detectChanges();
   });
 
-  it('should be created', () => {
-    expect(component).toBeTruthy();
-  });
+  it(
+    'should be created', 
+    inject(
+      [HttpTestingController, ServiceService],
+      (httpMock: HttpTestingController, serviceService: ServiceService) => {
+
+        const allModelsReq = httpMock.expectOne( serviceService.config.uri.allJobs );
+        expect( allModelsReq.request.method ).toBe("GET");
+        allModelsReq.flush( [] );
+
+        expect(component).toBeTruthy();
+      }
+    )
+  );
 });
diff --git a/ui/angular/src/app/loader/loader.component.spec.ts b/ui/angular/src/app/loader/loader.component.spec.ts
index 61757bc..bacf5d5 100644
--- a/ui/angular/src/app/loader/loader.component.spec.ts
+++ b/ui/angular/src/app/loader/loader.component.spec.ts
@@ -16,17 +16,21 @@
 specific language governing permissions and limitations
 under the License.
 */
-import {async, ComponentFixture, TestBed} from '@angular/core/testing';
+import {async, ComponentFixture, TestBed, inject} from '@angular/core/testing';
 
+import { AppModule } from '../app.module';
 import {LoaderComponent} from './loader.component';
+import { LoaderService } from './loader.service';
 
-describe('CreateMeasureComponent', () => {
+describe('LoaderComponent', () => {
   let component: LoaderComponent;
   let fixture: ComponentFixture<LoaderComponent>;
 
   beforeEach(async(() => {
     TestBed.configureTestingModule({
-      declarations: [LoaderComponent]
+      imports: [ AppModule ],
+      declarations: [],
+      providers: [ LoaderService ]
     })
       .compileComponents();
   }));
@@ -37,7 +41,7 @@
     fixture.detectChanges();
   });
 
-  it('should be created', () => {
+  it('should be created', inject([LoaderService], () => {
     expect(component).toBeTruthy();
-  });
+  }));
 });
diff --git a/ui/angular/src/app/loader/loader.service.spec.ts b/ui/angular/src/app/loader/loader.service.spec.ts
index 522dbea..19fa950 100644
--- a/ui/angular/src/app/loader/loader.service.spec.ts
+++ b/ui/angular/src/app/loader/loader.service.spec.ts
@@ -16,28 +16,31 @@
 specific language governing permissions and limitations
 under the License.
 */
-import {async, ComponentFixture, TestBed} from '@angular/core/testing';
+// import {async, ComponentFixture, TestBed, inject} from '@angular/core/testing';
 
-import {LoaderService} from './loader.service';
+// import { AppModule } from '../app.module';
+// import {LoaderService} from './loader.service';
 
-describe('CreateMeasureComponent', () => {
-  let component: LoaderService;
-  let fixture: ComponentFixture<LoaderService>;
+// describe('LoaderService', () => {
+//   let component: LoaderService;
+//   let fixture: ComponentFixture<LoaderService>;
 
-  beforeEach(async(() => {
-    TestBed.configureTestingModule({
-      declarations: [LoaderService]
-    })
-      .compileComponents();
-  }));
+//   beforeEach(async(() => {
+//     TestBed.configureTestingModule({
+//       imports: [ AppModule ],
+//       declarations: [],
+//       providers: [ LoaderService ]
+//     })
+//       .compileComponents();
+//   }));
 
-  beforeEach(() => {
-    fixture = TestBed.createComponent(LoaderService);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
+//   beforeEach(() => {
+//     fixture = TestBed.createComponent(LoaderService);
+//     component = fixture.componentInstance;
+//     fixture.detectChanges();
+//   });
 
-  it('should be created', () => {
-    expect(component).toBeTruthy();
-  });
-});
+//   it('should be created', inject([LoaderService], () => {
+//     expect(component).toBeTruthy();
+//   }));
+// });
diff --git a/ui/angular/src/app/login/login.component.spec.ts b/ui/angular/src/app/login/login.component.spec.ts
index 8475f0a..9964c41 100644
--- a/ui/angular/src/app/login/login.component.spec.ts
+++ b/ui/angular/src/app/login/login.component.spec.ts
@@ -18,6 +18,7 @@
 */
 import {async, ComponentFixture, TestBed} from '@angular/core/testing';
 
+import { AppModule } from '../app.module';
 import {LoginComponent} from './login.component';
 
 describe('LoginComponent', () => {
@@ -26,7 +27,8 @@
 
   beforeEach(async(() => {
     TestBed.configureTestingModule({
-      declarations: [LoginComponent]
+      imports: [ AppModule ],
+      declarations: []
     })
       .compileComponents();
   }));
diff --git a/ui/angular/src/app/measure/create-measure/ac/ac.component.spec.ts b/ui/angular/src/app/measure/create-measure/ac/ac.component.spec.ts
index 20f793d..3838dd8 100644
--- a/ui/angular/src/app/measure/create-measure/ac/ac.component.spec.ts
+++ b/ui/angular/src/app/measure/create-measure/ac/ac.component.spec.ts
@@ -16,9 +16,12 @@
 specific language governing permissions and limitations
 under the License.
 */
-import {async, ComponentFixture, TestBed} from '@angular/core/testing';
+import {async, ComponentFixture, TestBed, inject} from '@angular/core/testing';
+import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';
 
+import { AppModule } from '../../../app.module';
 import {AcComponent} from './ac.component';
+import { ServiceService } from '../../../service/service.service';
 
 describe('AcComponent', () => {
   let component: AcComponent;
@@ -26,7 +29,9 @@
 
   beforeEach(async(() => {
     TestBed.configureTestingModule({
-      declarations: [AcComponent]
+      imports: [ HttpClientTestingModule, AppModule ],
+      declarations: [],
+      providers: [ ServiceService ]
     })
       .compileComponents();
   }));
@@ -37,7 +42,13 @@
     fixture.detectChanges();
   });
 
-  it('should be created', () => {
-    expect(component).toBeTruthy();
-  });
+  it(
+    'should be created', 
+    inject(
+      [HttpTestingController, ServiceService],
+      (httpMock: HttpTestingController, serviceService: ServiceService) => {
+        expect(component).toBeTruthy();
+      }
+    )
+  );
 });
diff --git a/ui/angular/src/app/measure/create-measure/configuration/configuration.component.spec.ts b/ui/angular/src/app/measure/create-measure/configuration/configuration.component.spec.ts
index 20262a2..0883489 100644
--- a/ui/angular/src/app/measure/create-measure/configuration/configuration.component.spec.ts
+++ b/ui/angular/src/app/measure/create-measure/configuration/configuration.component.spec.ts
@@ -19,6 +19,7 @@
 
 import {async, ComponentFixture, TestBed} from '@angular/core/testing';
 
+import { AppModule } from '../../../app.module';
 import {ConfigurationComponent} from './configuration.component';
 
 describe('ConfigurationComponent', () => {
@@ -27,7 +28,8 @@
 
   beforeEach(async(() => {
     TestBed.configureTestingModule({
-      declarations: [ConfigurationComponent]
+      imports: [ AppModule ],
+      declarations: []
     })
       .compileComponents();
   }));
@@ -35,7 +37,15 @@
   beforeEach(() => {
     fixture = TestBed.createComponent(ConfigurationComponent);
     component = fixture.componentInstance;
-    fixture.detectChanges();
+    component.location = "";
+    component.data = {
+      where: "",
+      timezone: "",
+      num: 1,
+      timetype: "day",
+      needpath: false,
+      path: ""
+    };
   });
 
   it('should be created', () => {
diff --git a/ui/angular/src/app/measure/create-measure/create-measure.component.spec.ts b/ui/angular/src/app/measure/create-measure/create-measure.component.spec.ts
index d6079c2..6e2f849 100644
--- a/ui/angular/src/app/measure/create-measure/create-measure.component.spec.ts
+++ b/ui/angular/src/app/measure/create-measure/create-measure.component.spec.ts
@@ -16,9 +16,11 @@
 specific language governing permissions and limitations
 under the License.
 */
-import {async, ComponentFixture, TestBed} from '@angular/core/testing';
+import {async, ComponentFixture, TestBed, inject} from '@angular/core/testing';
 
+import { AppModule } from '../../app.module';
 import {CreateMeasureComponent} from './create-measure.component';
+import { LoaderService } from '../../loader/loader.service';
 
 describe('CreateMeasureComponent', () => {
   let component: CreateMeasureComponent;
@@ -26,7 +28,9 @@
 
   beforeEach(async(() => {
     TestBed.configureTestingModule({
-      declarations: [CreateMeasureComponent]
+      imports: [ AppModule ],
+      declarations: [],
+      providers: [ ]
     })
       .compileComponents();
   }));
@@ -37,7 +41,7 @@
     fixture.detectChanges();
   });
 
-  it('should be created', () => {
+  it('should be created', inject([LoaderService], () => {
     expect(component).toBeTruthy();
-  });
+  }));
 });
diff --git a/ui/angular/src/app/measure/create-measure/pr/confirmModal/confirmModal.component.spec.ts b/ui/angular/src/app/measure/create-measure/pr/confirmModal/confirmModal.component.spec.ts
index d5245d8..f3ab320 100644
--- a/ui/angular/src/app/measure/create-measure/pr/confirmModal/confirmModal.component.spec.ts
+++ b/ui/angular/src/app/measure/create-measure/pr/confirmModal/confirmModal.component.spec.ts
@@ -19,6 +19,7 @@
 import {async, ComponentFixture, TestBed} from '@angular/core/testing';
 
 import {PrConfirmModal} from './confirmModal.component';
+import { ProfilingStep1, ProfilingStep2, ProfilingStep3, ProfilingStep4 } from '../pr.component';
 
 describe('PrConfirmModalComponent', () => {
   let component: PrConfirmModal;
@@ -34,6 +35,10 @@
   beforeEach(() => {
     fixture = TestBed.createComponent(PrConfirmModal);
     component = fixture.componentInstance;
+    component.step1 = new ProfilingStep1();
+    component.step2 = new ProfilingStep2();
+    component.step3 = new ProfilingStep3();
+    component.step4 = new ProfilingStep4();
     fixture.detectChanges();
   });
 
diff --git a/ui/angular/src/app/measure/create-measure/pr/pr.component.spec.ts b/ui/angular/src/app/measure/create-measure/pr/pr.component.spec.ts
index f818bdf..ae3bbbb 100644
--- a/ui/angular/src/app/measure/create-measure/pr/pr.component.spec.ts
+++ b/ui/angular/src/app/measure/create-measure/pr/pr.component.spec.ts
@@ -16,9 +16,12 @@
 specific language governing permissions and limitations
 under the License.
 */
-import {async, ComponentFixture, TestBed} from '@angular/core/testing';
+import {async, ComponentFixture, TestBed, inject} from '@angular/core/testing';
+import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';
 
 import {PrComponent} from './pr.component';
+import { AppModule } from '../../../app.module';
+import { ServiceService } from '../../../service/service.service';
 
 describe('PrComponent', () => {
   let component: PrComponent;
@@ -26,7 +29,9 @@
 
   beforeEach(async(() => {
     TestBed.configureTestingModule({
-      declarations: [PrComponent]
+       imports: [ HttpClientTestingModule, AppModule ],
+       declarations: [],
+       providers: [ ServiceService ]
     })
       .compileComponents();
   }));
@@ -37,7 +42,17 @@
     fixture.detectChanges();
   });
 
-  it('should be created', () => {
-    expect(component).toBeTruthy();
-  });
+  it('should be created', 
+    inject(
+      [HttpTestingController, ServiceService], 
+      (httpMock: HttpTestingController, serviceService: ServiceService) => {
+
+        const req = httpMock.expectOne( serviceService.config.uri.dbtablenames );
+        expect( req.request.method ).toBe("GET");
+        req.flush( [] );
+
+        expect(component).toBeTruthy();
+      }
+    )
+  );
 });
diff --git a/ui/angular/src/app/measure/create-measure/pr/rule/rule.component.spec.ts b/ui/angular/src/app/measure/create-measure/pr/rule/rule.component.spec.ts
index fb4b869..15c58b0 100644
--- a/ui/angular/src/app/measure/create-measure/pr/rule/rule.component.spec.ts
+++ b/ui/angular/src/app/measure/create-measure/pr/rule/rule.component.spec.ts
@@ -18,6 +18,7 @@
 */
 import {async, ComponentFixture, TestBed} from '@angular/core/testing';
 
+import { AppModule } from '../../../../app.module';
 import {RuleComponent} from './rule.component';
 
 describe('RuleComponent', () => {
@@ -26,7 +27,8 @@
 
   beforeEach(async(() => {
     TestBed.configureTestingModule({
-      declarations: [RuleComponent]
+      imports: [ AppModule ],
+      declarations: []
     })
       .compileComponents();
   }));
diff --git a/ui/angular/src/app/measure/create-measure/pr/step1/step1.component.spec.ts b/ui/angular/src/app/measure/create-measure/pr/step1/step1.component.spec.ts
index 4e9a602..33c4a2c 100644
--- a/ui/angular/src/app/measure/create-measure/pr/step1/step1.component.spec.ts
+++ b/ui/angular/src/app/measure/create-measure/pr/step1/step1.component.spec.ts
@@ -16,9 +16,13 @@
 specific language governing permissions and limitations
 under the License.
 */
-import {async, ComponentFixture, TestBed} from '@angular/core/testing';
+import {async, ComponentFixture, TestBed, inject} from '@angular/core/testing';
+import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';
 
+import { AppModule } from '../../../../app.module';
 import {PrStep1Component} from './step1.component';
+import { ProfilingStep1 } from '../pr.component';
+import { ServiceService } from '../../../../service/service.service';
 
 describe('PrStep1Component', () => {
   let component: PrStep1Component;
@@ -26,7 +30,9 @@
 
   beforeEach(async(() => {
     TestBed.configureTestingModule({
-      declarations: [PrStep1Component]
+      imports: [ HttpClientTestingModule, AppModule ],
+      declarations: [],
+      providers: [ ServiceService ]
     })
       .compileComponents();
   }));
@@ -34,10 +40,22 @@
   beforeEach(() => {
     fixture = TestBed.createComponent(PrStep1Component);
     component = fixture.componentInstance;
+    component.step1 = new ProfilingStep1();
     fixture.detectChanges();
   });
 
-  it('should be created', () => {
-    expect(component).toBeTruthy();
-  });
+  it(
+    'should be created', 
+    inject(
+      [HttpTestingController, ServiceService],
+      (httpMock: HttpTestingController, serviceService: ServiceService) => {
+
+        const req = httpMock.expectOne( serviceService.config.uri.dbtablenames );
+        expect( req.request.method ).toBe("GET");
+        req.flush( [] );
+
+        expect(component).toBeTruthy();
+      }
+    )
+  );
 });
diff --git a/ui/angular/src/app/measure/create-measure/pr/step2/step2.component.spec.ts b/ui/angular/src/app/measure/create-measure/pr/step2/step2.component.spec.ts
index 17d0da0..45649a3 100644
--- a/ui/angular/src/app/measure/create-measure/pr/step2/step2.component.spec.ts
+++ b/ui/angular/src/app/measure/create-measure/pr/step2/step2.component.spec.ts
@@ -18,7 +18,9 @@
 */
 import {async, ComponentFixture, TestBed} from '@angular/core/testing';
 
+import { AppModule } from '../../../../app.module';
 import {PrStep2Component} from './step2.component';
+import { ProfilingStep1, ProfilingStep2 } from '../pr.component';
 
 describe('PrStep2Component', () => {
   let component: PrStep2Component;
@@ -26,7 +28,8 @@
 
   beforeEach(async(() => {
     TestBed.configureTestingModule({
-      declarations: [PrStep2Component]
+      imports: [ AppModule ],
+      declarations: [],
     })
       .compileComponents();
   }));
@@ -34,6 +37,8 @@
   beforeEach(() => {
     fixture = TestBed.createComponent(PrStep2Component);
     component = fixture.componentInstance;
+    component.step1 = [ new ProfilingStep1() ];
+    component.step2 = [ new ProfilingStep2() ];
     fixture.detectChanges();
   });
 
diff --git a/ui/angular/src/app/measure/create-measure/pr/step3/step3.component.spec.ts b/ui/angular/src/app/measure/create-measure/pr/step3/step3.component.spec.ts
index a4ecae5..c2c06b7 100644
--- a/ui/angular/src/app/measure/create-measure/pr/step3/step3.component.spec.ts
+++ b/ui/angular/src/app/measure/create-measure/pr/step3/step3.component.spec.ts
@@ -18,7 +18,9 @@
 */
 import {async, ComponentFixture, TestBed} from '@angular/core/testing';
 
+import { AppModule } from '../../../../app.module';
 import {PrStep3Component} from './step3.component';
+import { ProfilingStep1, ProfilingStep2, ProfilingStep3 } from '../pr.component';
 
 describe('PrStep3Component', () => {
   let component: PrStep3Component;
@@ -26,7 +28,8 @@
 
   beforeEach(async(() => {
     TestBed.configureTestingModule({
-      declarations: [PrStep3Component]
+      imports: [ AppModule ],
+      declarations: [],
     })
       .compileComponents();
   }));
@@ -34,7 +37,9 @@
   beforeEach(() => {
     fixture = TestBed.createComponent(PrStep3Component);
     component = fixture.componentInstance;
-    fixture.detectChanges();
+    component.step1 = new ProfilingStep1();
+    component.step2 = new ProfilingStep2();
+    component.step3 = new ProfilingStep3();
   });
 
   it('should be created', () => {
diff --git a/ui/angular/src/app/measure/create-measure/pr/step4/step4.component.spec.ts b/ui/angular/src/app/measure/create-measure/pr/step4/step4.component.spec.ts
index dddcd35..4159285 100644
--- a/ui/angular/src/app/measure/create-measure/pr/step4/step4.component.spec.ts
+++ b/ui/angular/src/app/measure/create-measure/pr/step4/step4.component.spec.ts
@@ -18,7 +18,9 @@
 */
 import {async, ComponentFixture, TestBed} from '@angular/core/testing';
 
+import { AppModule } from '../../../../app.module';
 import {PrStep4Component} from './step4.component';
+import { ProfilingStep1, ProfilingStep2, ProfilingStep3, ProfilingStep4 } from '../pr.component';
 
 describe('PrStep4Component', () => {
   let component: PrStep4Component;
@@ -26,7 +28,8 @@
 
   beforeEach(async(() => {
     TestBed.configureTestingModule({
-      declarations: [PrStep4Component]
+      imports: [ AppModule ],
+      declarations: [],
     })
       .compileComponents();
   }));
@@ -34,6 +37,10 @@
   beforeEach(() => {
     fixture = TestBed.createComponent(PrStep4Component);
     component = fixture.componentInstance;
+    component.step1 = new ProfilingStep1();
+    component.step2 = new ProfilingStep2();
+    component.step3 = new ProfilingStep3();
+    component.step4 = new ProfilingStep4();
     fixture.detectChanges();
   });
 
diff --git a/ui/angular/src/app/measure/create-measure/pub/pub.component.spec.ts b/ui/angular/src/app/measure/create-measure/pub/pub.component.spec.ts
index aa54581..1885ea9 100644
--- a/ui/angular/src/app/measure/create-measure/pub/pub.component.spec.ts
+++ b/ui/angular/src/app/measure/create-measure/pub/pub.component.spec.ts
@@ -16,17 +16,22 @@
 specific language governing permissions and limitations
 under the License.
 */
-import {async, ComponentFixture, TestBed} from '@angular/core/testing';
+import {async, ComponentFixture, TestBed, inject} from '@angular/core/testing';
+import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';
 
+import { AppModule } from '../../../app.module';
 import {PubComponent} from './pub.component';
+import { ServiceService } from '../../../service/service.service';
 
-describe('PrComponent', () => {
+describe('PubComponent', () => {
   let component: PubComponent;
   let fixture: ComponentFixture<PubComponent>;
 
   beforeEach(async(() => {
     TestBed.configureTestingModule({
-      declarations: [PubComponent]
+      imports: [ HttpClientTestingModule, AppModule ],
+      declarations: [],
+      providers: [ ServiceService ]
     })
       .compileComponents();
   }));
@@ -37,7 +42,18 @@
     fixture.detectChanges();
   });
 
-  it('should be created', () => {
-    expect(component).toBeTruthy();
-  });
+  it(
+    'should be created', 
+    inject(
+      [HttpTestingController, ServiceService],
+      (httpMock: HttpTestingController, serviceService: ServiceService) => {
+
+        const req = httpMock.expectOne( serviceService.config.uri.dataassetlist );
+        expect( req.request.method ).toBe("GET");
+        req.flush( [] );
+
+        expect(component).toBeTruthy();
+      }
+    )
+  );
 });
diff --git a/ui/angular/src/app/measure/create-measure/raw/raw.component.spec.ts b/ui/angular/src/app/measure/create-measure/raw/raw.component.spec.ts
index 15a7a97..3a13897 100644
--- a/ui/angular/src/app/measure/create-measure/raw/raw.component.spec.ts
+++ b/ui/angular/src/app/measure/create-measure/raw/raw.component.spec.ts
@@ -18,6 +18,7 @@
 */
 import {async, ComponentFixture, TestBed} from '@angular/core/testing';
 
+import { AppModule } from '../../../app.module';
 import {RawComponent} from './raw.component';
 
 describe('RawComponent', () => {
@@ -26,7 +27,8 @@
 
   beforeEach(async(() => {
     TestBed.configureTestingModule({
-      declarations: [RawComponent]
+      imports: [ AppModule ],
+      declarations: []
     })
       .compileComponents();
   }));
diff --git a/ui/angular/src/app/measure/measure-detail/measure-detail.component.spec.ts b/ui/angular/src/app/measure/measure-detail/measure-detail.component.spec.ts
index 8a8ac40..6fd2f25 100644
--- a/ui/angular/src/app/measure/measure-detail/measure-detail.component.spec.ts
+++ b/ui/angular/src/app/measure/measure-detail/measure-detail.component.spec.ts
@@ -16,9 +16,12 @@
 specific language governing permissions and limitations
 under the License.
 */
-import {async, ComponentFixture, TestBed} from '@angular/core/testing';
+import {async, ComponentFixture, TestBed, inject} from '@angular/core/testing';
+import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';
 
+import { AppModule } from '../../app.module';
 import {MeasureDetailComponent} from './measure-detail.component';
+import { ServiceService } from '../../service/service.service';
 
 describe('MeasureDetailComponent', () => {
   let component: MeasureDetailComponent;
@@ -26,7 +29,9 @@
 
   beforeEach(async(() => {
     TestBed.configureTestingModule({
-      declarations: [MeasureDetailComponent]
+      imports: [ HttpClientTestingModule, AppModule ],
+      declarations: [],
+      providers: [ ServiceService ]
     })
       .compileComponents();
   }));
@@ -37,7 +42,30 @@
     fixture.detectChanges();
   });
 
-  it('should be created', () => {
-    expect(component).toBeTruthy();
-  });
+  it(
+    'should be created', 
+    inject(
+      [HttpTestingController, ServiceService],
+      (httpMock: HttpTestingController, serviceService: ServiceService) => {
+
+        const req = httpMock.expectOne( serviceService.config.uri.getModel + "/null" );
+        expect( req.request.method ).toBe("GET");
+        req.flush({
+          "dq.type": "",
+          "evaluate.rule": "",
+          "data.sources": [{
+            "connectors": [{
+              "data.unit": "",
+              config: {
+                where: ""
+              },
+              predicates: []
+            }]
+          }]
+        });
+
+        expect(component).toBeTruthy();
+      }
+    )
+  );
 });
diff --git a/ui/angular/src/app/measure/measure.component.spec.ts b/ui/angular/src/app/measure/measure.component.spec.ts
index f6cf3fa..acf0db2 100644
--- a/ui/angular/src/app/measure/measure.component.spec.ts
+++ b/ui/angular/src/app/measure/measure.component.spec.ts
@@ -17,9 +17,12 @@
 under the License.
 */
 
-import {async, ComponentFixture, TestBed} from '@angular/core/testing';
+import {async, ComponentFixture, TestBed, inject} from '@angular/core/testing';
+import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';
 
+import { AppModule } from '../app.module';
 import {MeasureComponent} from './measure.component';
+import { ServiceService } from '../service/service.service';
 
 describe('MeasureComponent', () => {
   let component: MeasureComponent;
@@ -27,7 +30,9 @@
 
   beforeEach(async(() => {
     TestBed.configureTestingModule({
-      declarations: [MeasureComponent]
+      imports: [ HttpClientTestingModule, AppModule ],
+      declarations: [],
+      providers: [ ServiceService ]
     })
       .compileComponents();
   }));
@@ -38,7 +43,18 @@
     fixture.detectChanges();
   });
 
-  it('should be created', () => {
-    expect(component).toBeTruthy();
-  });
+  it(
+    'should be created', 
+    inject(
+      [HttpTestingController, ServiceService],
+      (httpMock: HttpTestingController, serviceService: ServiceService) => {
+
+        const req = httpMock.expectOne( serviceService.config.uri.allModels );
+        expect( req.request.method ).toBe("GET");
+        req.flush( {} );
+
+        expect(component).toBeTruthy();
+      }
+    )
+  );
 });
diff --git a/ui/angular/src/app/metric/detail-metric/detail-metric.component.spec.ts b/ui/angular/src/app/metric/detail-metric/detail-metric.component.spec.ts
index 42a922e..a21e618 100644
--- a/ui/angular/src/app/metric/detail-metric/detail-metric.component.spec.ts
+++ b/ui/angular/src/app/metric/detail-metric/detail-metric.component.spec.ts
@@ -16,9 +16,12 @@
 specific language governing permissions and limitations
 under the License.
 */
-import {async, ComponentFixture, TestBed} from '@angular/core/testing';
+import {async, ComponentFixture, TestBed, inject} from '@angular/core/testing';
+import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';
 
 import {DetailMetricComponent} from './detail-metric.component';
+import { ServiceService } from '../../service/service.service';
+import { AppModule } from '../../app.module';
 
 describe('DetailMetricComponent', () => {
   let component: DetailMetricComponent;
@@ -26,7 +29,9 @@
 
   beforeEach(async(() => {
     TestBed.configureTestingModule({
-      declarations: [DetailMetricComponent]
+      imports: [ HttpClientTestingModule, AppModule ],
+      declarations: [],
+      providers: [ ServiceService ]
     })
       .compileComponents();
   }));
@@ -37,7 +42,18 @@
     fixture.detectChanges();
   });
 
-  it('should be created', () => {
-    expect(component).toBeTruthy();
-  });
+  it(
+    'should be created', 
+    inject(
+      [HttpTestingController, ServiceService],
+      (httpMock: HttpTestingController, serviceService: ServiceService) => {
+
+        const req = httpMock.expectOne( serviceService.config.uri.metricdetail + "?metricName=null&size=300&offset=0" );
+        expect( req.request.method ).toBe("GET");
+        req.flush( [] );
+
+        expect(component).toBeTruthy();
+      }
+    )
+  );
 });
diff --git a/ui/angular/src/app/metric/metric.component.spec.ts b/ui/angular/src/app/metric/metric.component.spec.ts
index 5ac910b..cd8a050 100644
--- a/ui/angular/src/app/metric/metric.component.spec.ts
+++ b/ui/angular/src/app/metric/metric.component.spec.ts
@@ -16,9 +16,14 @@
 specific language governing permissions and limitations
 under the License.
 */
-import {async, ComponentFixture, TestBed} from '@angular/core/testing';
+import {async, ComponentFixture, TestBed, inject} from '@angular/core/testing';
+import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';
 
+import { AppModule } from '../app.module';
+import { ServiceService } from '../service/service.service';
 import {MetricComponent} from './metric.component';
+import { LoaderService } from '../loader/loader.service';
+import { ChartService } from '../service/chart.service';
 
 describe('MetricComponent', () => {
   let component: MetricComponent;
@@ -26,7 +31,9 @@
 
   beforeEach(async(() => {
     TestBed.configureTestingModule({
-      declarations: [MetricComponent]
+      imports: [ HttpClientTestingModule, AppModule ],
+      declarations: [],
+      providers: [ LoaderService, ServiceService, ChartService ]
     })
       .compileComponents();
   }));
@@ -37,7 +44,18 @@
     fixture.detectChanges();
   });
 
-  it('should be created', () => {
-    expect(component).toBeTruthy();
-  });
+  it(
+    'should be created', 
+    inject(
+      [HttpTestingController, ServiceService],
+      (httpMock: HttpTestingController, serviceService: ServiceService) => {
+
+        const req = httpMock.expectOne( serviceService.config.uri.dashboard );
+        expect( req.request.method ).toBe("GET");
+        req.flush( [] );
+
+        expect(component).toBeTruthy();
+      }
+    )
+  );
 });
diff --git a/ui/angular/src/app/mydashboard/mydashboard.component.spec.ts b/ui/angular/src/app/mydashboard/mydashboard.component.spec.ts
index abbb512..b779714 100644
--- a/ui/angular/src/app/mydashboard/mydashboard.component.spec.ts
+++ b/ui/angular/src/app/mydashboard/mydashboard.component.spec.ts
@@ -17,6 +17,7 @@
 under the License.
 */
 import {async, ComponentFixture, TestBed} from '@angular/core/testing';
+import { RouterTestingModule } from '@angular/router/testing';
 
 import {MydashboardComponent} from './mydashboard.component';
 
@@ -26,7 +27,8 @@
 
   beforeEach(async(() => {
     TestBed.configureTestingModule({
-      declarations: [MydashboardComponent]
+      imports: [ RouterTestingModule ],
+      declarations: [MydashboardComponent],
     })
       .compileComponents();
   }));
diff --git a/ui/angular/src/app/service/chart.service.spec.ts b/ui/angular/src/app/service/chart.service.spec.ts
index c72bc03..a830e49 100644
--- a/ui/angular/src/app/service/chart.service.spec.ts
+++ b/ui/angular/src/app/service/chart.service.spec.ts
@@ -19,15 +19,16 @@
 import {TestBed, inject} from '@angular/core/testing';
 
 import {ChartService} from './chart.service';
+import { LoaderService } from '../loader/loader.service';
 
 describe('ChartService', () => {
   beforeEach(() => {
     TestBed.configureTestingModule({
-      providers: [ChartService]
+      providers: [ChartService, LoaderService]
     });
   });
 
-  it('should be created', inject([ChartService], (service: ChartService) => {
+  it('should be created', inject([ChartService, LoaderService], (service: ChartService, loaderService: LoaderService) => {
     expect(service).toBeTruthy();
   }));
 });
diff --git a/ui/angular/src/app/service/http.service.spec.ts b/ui/angular/src/app/service/http.service.spec.ts
index 69c1860..4d31fba 100644
--- a/ui/angular/src/app/service/http.service.spec.ts
+++ b/ui/angular/src/app/service/http.service.spec.ts
@@ -19,11 +19,12 @@
 import {TestBed, inject} from '@angular/core/testing';
 
 import {HttpService} from './http.service';
+import { LoaderService } from '../loader/loader.service';
 
-describe('ServiceService', () => {
+describe('HttpService', () => {
   beforeEach(() => {
     TestBed.configureTestingModule({
-      providers: [HttpService]
+      providers: [HttpService, LoaderService]
     });
   });
 
diff --git a/ui/angular/src/app/service/service.service.spec.ts b/ui/angular/src/app/service/service.service.spec.ts
index acc57f9..d3fede8 100644
--- a/ui/angular/src/app/service/service.service.spec.ts
+++ b/ui/angular/src/app/service/service.service.spec.ts
@@ -19,11 +19,12 @@
 import {TestBed, inject} from '@angular/core/testing';
 
 import {ServiceService} from './service.service';
+import { LoaderService } from '../loader/loader.service';
 
 describe('ServiceService', () => {
   beforeEach(() => {
     TestBed.configureTestingModule({
-      providers: [ServiceService]
+      providers: [ServiceService, LoaderService]
     });
   });
 
diff --git a/ui/angular/src/app/sidebar/sidebar.component.spec.ts b/ui/angular/src/app/sidebar/sidebar.component.spec.ts
index a8c8134..d72491f 100644
--- a/ui/angular/src/app/sidebar/sidebar.component.spec.ts
+++ b/ui/angular/src/app/sidebar/sidebar.component.spec.ts
@@ -16,9 +16,12 @@
 specific language governing permissions and limitations
 under the License.
 */
-import {async, ComponentFixture, TestBed} from '@angular/core/testing';
+import {async, ComponentFixture, TestBed, inject} from '@angular/core/testing';
+import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';
 
 import {SidebarComponent} from './sidebar.component';
+import { AppModule } from '../app.module';
+import { ServiceService } from '../service/service.service';
 
 describe('SidebarComponent', () => {
   let component: SidebarComponent;
@@ -26,7 +29,9 @@
 
   beforeEach(async(() => {
     TestBed.configureTestingModule({
-      declarations: [SidebarComponent]
+      imports: [ HttpClientTestingModule, AppModule ],
+      declarations: [],
+      providers: [ ServiceService ]
     })
       .compileComponents();
   }));
@@ -37,7 +42,18 @@
     fixture.detectChanges();
   });
 
-  it('should be created', () => {
-    expect(component).toBeTruthy();
-  });
+  it(
+    'should be created', 
+    inject(
+      [HttpTestingController, ServiceService],
+      (httpMock: HttpTestingController, serviceService: ServiceService) => {
+
+        const req = httpMock.expectOne( serviceService.config.uri.dashboard );
+        expect( req.request.method ).toBe("GET");
+        req.flush( [] );
+
+        expect(component).toBeTruthy();
+      }
+    )
+  );
 });
