angular4-testing/project-manager/src/app/blog/blog.component.spec.ts

106 lines
3.9 KiB
TypeScript
Raw Normal View History

import {BlogComponent} from './blog.component'
import {TestBed} from "@angular/core/testing";
import {RouterTestingModule} from "@angular/router/testing";
2017-04-15 10:06:40 +02:00
import {CUSTOM_ELEMENTS_SCHEMA} from "@angular/core";
2017-04-16 23:21:41 +02:00
import {By} from "@angular/platform-browser";
import {FormsModule} from "@angular/forms";
describe('Blog Component', () => {
describe('Isolated Class Test', () => {
let blogComponent: BlogComponent;
beforeEach(() => {
blogComponent = new BlogComponent(null, null, null);
});
it('should have initial entries', () => {
expect(blogComponent.entries.length).toBe(2);
blogComponent.entries.forEach((entry) => {
expect(entry.id).toBeLessThanOrEqual(blogComponent.id);
expect(entry.createdAt.getDate()).toBe(new Date().getDate());
})
});
it('should create new list entry and increment id-pointer', () => {
let preCreationId = blogComponent.id;
let entryTitle = "some fancy title";
let entryImage = "https://avatars1.githubusercontent.com/u/3284117";
let entryText = "some important text";
blogComponent.createBlogEntry(entryTitle, entryImage, entryText);
let newEntry = blogComponent.entries[blogComponent.entries.length - 1];
expect(newEntry.id - 1).toBe(preCreationId);
expect(newEntry.image).toBe(entryImage);
expect(newEntry.text).toBe(entryText);
expect(newEntry.createdAt.getDate()).toBe(new Date().getDate());
});
it('should delete entry by given id - and not change global max-id', () => {
let preDeletionId = blogComponent.id;
let latestId = blogComponent.entries[blogComponent.entries.length - 1].id;
blogComponent.deleteBlogEntry(latestId);
expect(blogComponent.id).toBe(preDeletionId);
expect(() => {
if (blogComponent.entries.length > 0) {
return blogComponent.entries[blogComponent.entries.length - 1];
} else {
return 0;
}
}).not.toBe(latestId);
});
});
2017-04-16 23:21:41 +02:00
describe('Basic DOM Form Test ', () => {
let fixture;
let instance;
let element;
2017-04-16 23:21:41 +02:00
const testTitle = 'testTitle';
const testImage = 'imageUrl';
const testText = 'testText';
beforeEach(() => {
TestBed.configureTestingModule({
imports: [RouterTestingModule.withRoutes([])],
2017-04-15 10:06:40 +02:00
declarations: [BlogComponent],
// CUSTOM_ELEMENTS_SCHEMA - verhindert das Laden von Sub-Komponenten
schemas: [CUSTOM_ELEMENTS_SCHEMA]
});
fixture = TestBed.createComponent(BlogComponent);
instance = fixture.componentInstance;
});
2017-04-16 23:21:41 +02:00
it('should call create method with provided field input - using nativeElement', () => {
element = fixture.nativeElement;
const spy = spyOn(instance, 'createBlogEntry');
2017-04-16 23:21:41 +02:00
// beachten : value würde immer funktionieren um Werte als Variable
// übertragbar einzutragen/ auszulesen, textContent hingegen nur bei textarea
element.querySelector('div > #title').value = testTitle;
element.querySelector('.form :nth-child(2) > input').value = testImage;
element.querySelector('#text').textContent = testText;
element.querySelector('div > button').click();
expect(spy).toHaveBeenCalledWith(testTitle, testImage, testText);
});
2017-04-16 23:21:41 +02:00
it('should call create method with provided field input - using debugElement', () => {
element = fixture.debugElement;
const spy = spyOn(instance, 'createBlogEntry');
// beachten : value würde immer funktionieren um Werte als Variable
2017-04-16 23:21:41 +02:00
// übertragbar einzutragen/ auszulesen, textContent hingegen nur bei textarea
element.query(By.css('#title')).nativeElement.value = testTitle;
element.query(By.css('.form :nth-child(2) > input')).nativeElement.value = testImage;
element.query(By.css('#text')).nativeElement.textContent = testText;
element.query(By.css('button')).nativeElement.click();
expect(spy).toHaveBeenCalledWith(testTitle, testImage, testText);
2017-04-16 23:21:41 +02:00
});
});
});