diff --git a/project-manager/src/app/blog/blog-entry/blog-entry.component.ts b/project-manager/src/app/blog/blog-entry/blog-entry.component.ts
index e2a688b..28c1365 100644
--- a/project-manager/src/app/blog/blog-entry/blog-entry.component.ts
+++ b/project-manager/src/app/blog/blog-entry/blog-entry.component.ts
@@ -8,8 +8,9 @@ import {BlogComponent} from "../blog.component";
styleUrls: ['../blog.component.css']
})
export class BlogEntryComponent {
- @Input() blogComponent: BlogComponent;
@Input() entry: BlogEntry;
+ @Input() blogComponent: BlogComponent;
+
deleteBlogEntry(id: number) {
this.blogComponent.deleteBlogEntry(id);
diff --git a/project-manager/src/app/blog/blog.component.html b/project-manager/src/app/blog/blog.component.html
index 404bcbf..73b713c 100644
--- a/project-manager/src/app/blog/blog.component.html
+++ b/project-manager/src/app/blog/blog.component.html
@@ -1,5 +1,7 @@
Angular-Blog
-
+
+
+
Neuen Blog-Eintrag erstellen
diff --git a/project-manager/src/app/blog/blog.component.spec.ts b/project-manager/src/app/blog/blog.component.spec.ts
index 85617ed..e681e40 100644
--- a/project-manager/src/app/blog/blog.component.spec.ts
+++ b/project-manager/src/app/blog/blog.component.spec.ts
@@ -1,19 +1,27 @@
import {BlogComponent} from './blog.component'
-import {TestBed} from "@angular/core/testing";
+import {async, TestBed} from "@angular/core/testing";
import {RouterTestingModule} from "@angular/router/testing";
import {CUSTOM_ELEMENTS_SCHEMA} from "@angular/core";
import {By} from "@angular/platform-browser";
-import {FormsModule} from "@angular/forms";
+import {BlogEntryComponent} from "./blog-entry/blog-entry.component";;
describe('Blog Component', () => {
- describe('Isolated Class Test', () => {
- let blogComponent: BlogComponent;
+ describe('Isolated Component Test', () => {
+ let blogComponent;
beforeEach(() => {
- blogComponent = new BlogComponent(null, null, null);
+ TestBed.configureTestingModule({
+ imports: [RouterTestingModule.withRoutes([])],
+ declarations: [BlogComponent]
+ });
});
+ beforeEach(async(()=> {
+ TestBed.overrideComponent(BlogComponent, {set: {template: ''}});
+ blogComponent = TestBed.createComponent(BlogComponent).componentInstance;
+ }));
+
it('should have initial entries', () => {
expect(blogComponent.entries.length).toBe(2);
blogComponent.entries.forEach((entry) => {
@@ -102,4 +110,28 @@ describe('Blog Component', () => {
});
+ describe('Basic DOM Form Test including BlogEntryComponent ', () => {
+
+ let fixture;
+ let instance;
+ let element;
+
+ beforeEach(() => {
+ TestBed.configureTestingModule({
+ imports: [RouterTestingModule.withRoutes([])],
+ declarations: [BlogComponent, BlogEntryComponent],
+ });
+ fixture = TestBed.createComponent(BlogComponent);
+ instance = fixture.componentInstance;
+ element = fixture.debugElement;
+ });
+
+ it('should find first entry title in DOM', () => {
+ fixture.detectChanges();
+ const firstEntryTitle = instance.entries[0].title;
+ expect(element.query(By.css('#entry-list > blog-entry > div > div:nth-child(2) > .title'))
+ .nativeElement.textContent).toBe(firstEntryTitle);
+ });
+ })
+
});
diff --git a/project-manager/src/app/blog/blog.component.ts b/project-manager/src/app/blog/blog.component.ts
index f4aab30..245ce55 100644
--- a/project-manager/src/app/blog/blog.component.ts
+++ b/project-manager/src/app/blog/blog.component.ts
@@ -19,9 +19,9 @@ export class BlogComponent {
const initialEntries = [
{
id: 1,
- title: "Angular 2 erschienen",
+ title: "Angular 4 erschienen",
image: "data:image/png;base64,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",
- text: "Endlich ist die finale Version von Angular 2 erschienen. Nach langer Beta-Phase ...",
+ text: "Endlich ist die finale Version von Angular 2 erschienen.",
createdAt: null
},
{
diff --git a/project-manager/src/app/login/login.component.spec.ts b/project-manager/src/app/login/login.component.spec.ts
index b170260..f6ed848 100644
--- a/project-manager/src/app/login/login.component.spec.ts
+++ b/project-manager/src/app/login/login.component.spec.ts
@@ -3,7 +3,7 @@ import {LoginComponent} from "./login.component";
import {RouterTestingModule} from "@angular/router/testing";
import {LoginService} from "../services/login-service/login-service";
import {FormsModule} from "@angular/forms";
-import {MockEmptyClass} from "../mocks/mock-empty-class";
+import {MockLoginService} from "../mocks/mock-login-service";
import Spy = jasmine.Spy;
@@ -14,7 +14,7 @@ describe('Login Component UI Driven Form Test with Spy', () => {
imports: [FormsModule, RouterTestingModule.withRoutes([])],
declarations: [LoginComponent],
providers: [
- {provide: LoginService, useClass: MockEmptyClass}
+ {provide: LoginService, useClass: MockLoginService}
],
})
});
@@ -30,21 +30,20 @@ describe('Login Component UI Driven Form Test with Spy', () => {
loginFixture.autoDetectChanges(true);
// Login ausfuellen und absenden
- loginFixture.whenStable().then(() => {
- // Spy anmelden, die eigentliche Methode wird nicht mehr aufgerufen
- const spy = spyOn(loginInstance, 'login');
- // Formular Eingabe
- loginElement.querySelector('div /deep/ div > #inputEmail').value = inputUser;
- loginElement.querySelector('div /deep/ div > #inputPassword').value = inputPass;
- // Trigger Submit - nicht möglich über click() oder HTTPNode submit()
- // daher in Comp '@ViewChild(NgForm)' benoetigt
- loginInstance.form.ngSubmit.emit();
+ let service = loginFixture.debugElement.injector.get(LoginService);
+ // Spy anmelden, die eigentliche Methode wird nicht mehr aufgerufen
+ const spy = spyOn(service, 'login');
- // Spy auswerten
- expect(spy).toHaveBeenCalledWith(inputUser, inputPass);
- });
+ // Formular Eingabe
+ loginElement.querySelector('div /deep/ div > #inputEmail').value = inputUser;
+ loginElement.querySelector('div /deep/ div > #inputPassword').value = inputPass;
+ // Trigger Submit - nicht möglich über click() oder HTTPNode submit()
+ // daher in Comp '@ViewChild(NgForm)' benoetigt
+ loginInstance.form.ngSubmit.emit();
+ // Spy auswerten
+ expect(spy).toHaveBeenCalledWith(inputUser, inputPass);
});
});
diff --git a/project-manager/src/app/mocks/mock-empty-class.ts b/project-manager/src/app/mocks/mock-empty-class.ts
deleted file mode 100644
index 828d90d..0000000
--- a/project-manager/src/app/mocks/mock-empty-class.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-export class MockEmptyClass {
-
-}
diff --git a/project-manager/src/app/mocks/mock-login-service.ts b/project-manager/src/app/mocks/mock-login-service.ts
new file mode 100644
index 0000000..2e2796b
--- /dev/null
+++ b/project-manager/src/app/mocks/mock-login-service.ts
@@ -0,0 +1,5 @@
+export class MockLoginService {
+
+ login(name, password) {};
+
+}
diff --git a/project-manager/src/app/tasks/edit-task/edit-task.component.spec.ts b/project-manager/src/app/tasks/edit-task/edit-task.component.spec.ts
index da272b7..529cdb1 100644
--- a/project-manager/src/app/tasks/edit-task/edit-task.component.spec.ts
+++ b/project-manager/src/app/tasks/edit-task/edit-task.component.spec.ts
@@ -18,28 +18,6 @@ import {generateRandomString} from "../../test/test.helper";
describe('EditTask Component', () => {
- @Component({
- template: ''
- })
- class TestComponent {
- }
-
- beforeEach(() => {
- TestBed.configureTestingModule({
- imports: [FormsModule, RouterTestingModule.withRoutes([
- {path: 'new', component: EditTaskComponent},
- {path: 'edit/:id', component: EditTaskComponent}
- ],
- )],
- declarations: [EditTaskComponent, ShowErrorComponent, APPLICATION_VALIDATORS, TestComponent],
- providers: [
- Title,
- {provide: TaskService, useClass: MockTaskService},
- ]
- });
- });
-
-
describe('Template Driven Form API-based Test', () => {
let fixture;
@@ -47,11 +25,20 @@ describe('EditTask Component', () => {
let form;
beforeEach(() => {
+ TestBed.configureTestingModule({
+ imports: [FormsModule, RouterTestingModule.withRoutes([],
+ )],
+ declarations: [EditTaskComponent, ShowErrorComponent, APPLICATION_VALIDATORS],
+ providers: [
+ Title,
+ {provide: TaskService, useClass: MockTaskService},
+ ]
+ });
fixture = TestBed.createComponent(EditTaskComponent);
fixture.autoDetectChanges(true);
});
- it('should validate the title correctly', (done) => {
+ it('should validate the title correctly', () => {
fixture.whenStable().then(() => {
form = fixture.componentInstance.form.form;
const titleControl = form.get('title');
@@ -66,7 +53,6 @@ describe('EditTask Component', () => {
titleControl.setValue(generateRandomString(101));
expect(titleControl.errors['maxlength']).toEqual({requiredLength: 100, actualLength: 101});
- done();
});
});
@@ -86,7 +72,7 @@ describe('EditTask Component', () => {
});
});
- it('should show error on tag name provided with gt 0 and lt 3', (done) => {
+ it('should show error on tag name provided with gt 0 and lt 3', () => {
fixture.componentInstance.addTag();
fixture.whenStable().then(() => {
form = fixture.componentInstance.form.form;
@@ -99,11 +85,11 @@ describe('EditTask Component', () => {
tagControl.setValue('abc');
expect(tagControl.errors).toBeNull();
- done();
+
});
});
- it('should validate assignee email correctly', (done) => {
+ it('should validate assignee email correctly', () => {
fixture.whenStable().then(() => {
form = fixture.componentInstance.form.form;
const invalidEmailObject = {invalidEMail: true};
@@ -121,16 +107,40 @@ describe('EditTask Component', () => {
assigneeEmail.setValue('test@web.de');
expect(assigneeEmail.errors).toBeNull();
- done();
})
});
});
+ /**
+ * Hinweis: Die folgende TestSuite entstammt dem ursprünglichen edit-task.component.spec.ts Tests
+ * dieses Projektes und ist geistiges Eigentum vom Chritoph Höller, dem Ersteller des Ausgangsprojektes
+ */
describe('Routing', () => {
+ @Component({
+ template: ''
+ })
+ class TestComponent {
+ }
+
let taskService: TaskService;
+ beforeEach(() => {
+ TestBed.configureTestingModule({
+ imports: [FormsModule, RouterTestingModule.withRoutes([
+ {path: 'new', component: EditTaskComponent},
+ {path: 'edit/:id', component: EditTaskComponent}
+ ],
+ )],
+ declarations: [EditTaskComponent, ShowErrorComponent, APPLICATION_VALIDATORS, TestComponent],
+ providers: [
+ Title,
+ {provide: TaskService, useClass: MockTaskService},
+ ]
+ });
+ });
+
beforeEach(inject([TaskService], (_taskService) => {
taskService = _taskService;
}));
diff --git a/project-manager/src/app/test/basic-test-example.spec.ts b/project-manager/src/app/test/basic-test-example.spec.ts
index f7debf7..783d9ed 100644
--- a/project-manager/src/app/test/basic-test-example.spec.ts
+++ b/project-manager/src/app/test/basic-test-example.spec.ts
@@ -1,37 +1,79 @@
// Test Suite
describe('Basic Test', () => {
- // Variablendeklaration zur Verwendung in mehreren Testfällen
- let someInt;
+ // geschachtelte TestSuite
+ describe('Matcher example', () => {
+ // Variablendeklaration zur Verwendung in mehreren Testfällen
+ let someInt;
- // Methode wird vor jedem Testfall ausgeführt
- beforeEach(() => {
- someInt = 2;
+ // Methode wird vor jedem Testfall ausgeführt
+ beforeEach(() => {
+ someInt = 2;
+ });
+
+ // Testfall 1
+ it('should succeed on most commonly used matchers', () => {
+ expect(1 + 1).toBe(2)
+ expect(null).toEqual(null);
+ expect('Hello world').toContain('Hello');
+ expect(true).toBeTruthy();
+ expect(false).toBeFalsy();
+ expect(null).toBeNull();
+ expect(undefined).toBeUndefined();
+ expect('angular.txt').toMatch(/\w+.(txt)/);
+ expect('World').not.toContain('Hello');
+ });
+
+ //Testfall 2
+ it('someInt should have value from beforeEach()', () => {
+ expect(someInt).toBe(2);
+ someInt = 20;
+ expect(someInt).toBe(20);
+ });
+
+ // Testfall 3
+ it('someInt should have overwritten value from beforeEach()', () => {
+ expect(someInt).toBe(2);
+ });
});
- // Testfall 1
- it('should succeed on most commonly used matchers', () => {
- expect(1 + 1).toBe(2)
- expect(null).toEqual(null);
- expect('Hello world').toContain('Hello');
- expect(true).toBeTruthy();
- expect(false).toBeFalsy();
- expect(null).toBeNull();
- expect(undefined).toBeUndefined();
- expect('angular.txt').toMatch(/\w+.(txt)/);
- expect('World').not.toContain('Hello');
+
+ describe('Calculator Class Testing', () => {
+ class Calculator {
+ private val1: number = 0;
+ private val2: number = 0;
+
+ constructor(val1: number, val2: number) {
+ this.val1 = val1;
+ this.val2 = val2;
+ }
+
+ add(): number {
+ return this.val1 + this.val2
+ };
+
+ sub(): number {
+ return this.val1 - this.val2
+ };
+
+ mul(): number {
+ return this.val1 * this.val2
+ };
+
+ div(): number {
+ return this.val1 / this.val2
+ };
+ }
+
+ it('should return calculated values for each method', () => {
+ const calc = new Calculator(4, 12);
+ expect(calc.add()).toBe(16);
+ expect(calc.sub()).toBe(-8);
+ expect(calc.mul()).toBe(48);
+ expect(calc.div()).toBe(1 / 3);
+ });
+
});
- //Testfall 2
- it('someInt should have value from beforeEach()', () => {
- expect(someInt).toBe(2);
- someInt = 20;
- expect(someInt).toBe(20);
- });
-
- // Testfall 3
- it('someInt should have overwritten value from beforeEach()', () => {
- expect(someInt).toBe(2);
- });
});