-
-
Save cdoremus/8713b86e341b464dfcbd278ec89beb10 to your computer and use it in GitHub Desktop.
Angular 2 test snippets for Angular final version. Codebase for https://developers.livechatinc.com/blog/category/programming/angular-2/
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// App | |
import { Component } from '@angular/core'; | |
@Component({ | |
selector: 'app', | |
template: '<span>{{ sayHello() }}</span>', | |
}) | |
export class App { | |
public name: string = 'John'; | |
sayHello(): string { | |
return `Hello ${this.name}`; | |
} | |
} | |
// App tests | |
describe('App', () => { | |
beforeEach(() => { | |
this.app = new App(); | |
}); | |
it('should have name property', () => { | |
expect(this.app.name).toBe('John'); | |
}); | |
it('should say hello with name property', () => { | |
expect(this.app.sayHello()).toBe('Hello John'); | |
}); | |
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// App | |
import { Component, Input } from '@angular/core'; | |
@Component({ | |
selector: 'list', | |
template: '<span *ngFor="let user of users">{{ user }}</span>', | |
}) | |
export class ListComponent { | |
@Input() public users: Array<string> = []; | |
} | |
// App tests | |
import { async, inject, TestBed } from '@angular/core/testing'; | |
import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing'; | |
TestBed.initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting()); | |
describe('ListComponent', () => { | |
beforeEach(() => { | |
TestBed.configureTestingModule({ | |
declarations: [ListComponent] | |
}); | |
this.fixture = TestBed.createComponent(ListComponent); | |
}); | |
it('should render list', async(() => { | |
const element = this.fixture.nativeElement; | |
this.fixture.componentInstance.users = ['John']; | |
this.fixture.detectChanges(); | |
expect(element.querySelectorAll('span').length).toBe(1); | |
})); | |
}); | |
// App DI | |
class UserService { | |
public users: Array<string> = ['John']; | |
} | |
@Component({ | |
selector: 'list', | |
template: '<span *ngFor="let user of users">{{ user }}</span>', | |
}) | |
class ListComponentBootstrapDI { | |
private users: Array<string> = []; | |
constructor(userService: UserService) { | |
this.users = userService.users; | |
} | |
} | |
class MockUserService { | |
public users: Array<string> = ['John', 'Steve']; | |
} | |
describe('ListComponent DI', () => { | |
beforeEach(() => { | |
TestBed.configureTestingModule({ | |
declarations: [ListComponentBootstrapDI], | |
providers: [{ provide: UserService, useClass: MockUserService }], | |
}); | |
this.fixture = TestBed.createComponent(ListComponentBootstrapDI); | |
}); | |
it('should render list', async(() => { | |
const element = this.fixture.nativeElement; | |
this.fixture.detectChanges(); | |
expect(element.querySelectorAll('span').length).toBe(2); | |
})); | |
}); | |
// App DI for Component | |
@Component({ | |
selector: 'list', | |
template: '<span *ngFor="let user of users">{{ user }}</span>', | |
providers: [UserService], | |
}) | |
class ListComponentComponentDI { | |
private users: Array<string> = []; | |
constructor(userService: UserService) { | |
this.users = userService.users; | |
} | |
} | |
// App DI for Component tests | |
describe('ListComponent DI Component', () => { | |
beforeEach(() => { | |
TestBed.configureTestingModule({ | |
declarations: [ListComponentBootstrapDI], | |
}); | |
this.fixture = TestBed | |
.overrideComponent(ListComponentBootstrapDI, { | |
set: { | |
providers: [{ provide: UserService, useClass: MockUserService }], | |
}, | |
}) | |
.createComponent(ListComponentBootstrapDI); | |
}); | |
it('should render list', async(() => { | |
const element = this.fixture.nativeElement; | |
this.fixture.detectChanges(); | |
expect(element.querySelectorAll('span').length).toBe(2); | |
})); | |
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// App | |
class TestService { | |
public name: string = 'Injected Service'; | |
} | |
// App tests | |
import { inject, TestBed } from '@angular/core/testing'; | |
import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing'; | |
TestBed.initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting()); | |
describe('TestService', () => { | |
beforeEach(() => { | |
this.testService = new TestService(); | |
}); | |
it('should have name property set', () => { | |
expect(this.testService.name).toBe('Injected Service'); | |
}); | |
}); | |
describe('TestService Injected', () => { | |
beforeEach(() => { | |
TestBed.configureTestingModule({ | |
providers: [TestService], | |
}); | |
}); | |
it('should have name property set', inject([TestService], (testService: TestService) => { | |
expect(testService.name).toBe('Injected Service'); | |
})); | |
}); | |
class MockTestService { | |
public mockName: string = 'Mocked Service'; | |
} | |
describe('TestService Mocked', () => { | |
beforeEach(() => { | |
TestBed.configureTestingModule({ | |
providers: [{ provide: TestService, useClass: MockTestService }], | |
}); | |
}); | |
it('should have name property set', inject([TestService], (testService: TestService) => { | |
expect(testService.mockName).toBe('Mocked Service'); | |
})); | |
}); | |
class MockTestServiceInherited extends TestService { | |
public sayHello(): string { | |
return this.name; | |
} | |
} | |
describe('TestService Mocked Inherited', () => { | |
beforeEach(() => { | |
TestBed.configureTestingModule({ | |
providers: [{ provide: TestService, useClass: MockTestServiceInherited }], | |
}); | |
}); | |
it('should say hello with name', inject([TestService], (testService: TestService) => { | |
expect(testService.sayHello()).toBe('Injected Service'); | |
})); | |
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// App | |
import { Injectable } from '@angular/core'; | |
import { Http } from '@angular/http'; | |
@Injectable() | |
export class TestService { | |
constructor(private http: Http) {} | |
getUsers() { | |
return this.http.get('http://foo.bar'); | |
} | |
} | |
// App tests | |
import { inject, TestBed } from '@angular/core/testing'; | |
import { BaseRequestOptions, Response, ResponseOptions } from '@angular/http'; | |
import { MockBackend, MockConnection } from '@angular/http/testing'; | |
import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing'; | |
TestBed.initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting()); | |
describe('Http', () => { | |
beforeEach(() => { | |
TestBed.configureTestingModule({ | |
providers: [ | |
TestService, | |
BaseRequestOptions, | |
MockBackend, | |
{ | |
provide: Http, | |
useFactory: (backend: MockBackend, defaultOptions: BaseRequestOptions) => { | |
return new Http(backend, defaultOptions); | |
}, | |
deps: [MockBackend, BaseRequestOptions], | |
}, | |
], | |
}); | |
}); | |
beforeEach(inject([MockBackend], (backend: MockBackend) => { | |
const baseResponse = new Response(new ResponseOptions({ body: 'got response' })); | |
backend.connections.subscribe((c: MockConnection) => c.mockRespond(baseResponse)); | |
})); | |
it('should return response when subscribed to getUsers', inject([TestService], (testService: TestService) => { | |
testService.getUsers().subscribe((res: Response) => { | |
expect(res.text()).toBe('got response'); | |
}); | |
})); | |
}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// App | |
import { Component } from '@angular/core'; | |
import { Routes } from '@angular/router'; | |
@Component({ | |
selector: 'app', | |
template: `<router-outlet></router-outlet>` | |
}) | |
class AppComponent {} | |
// App tests | |
import { async, TestBed } from '@angular/core/testing'; | |
import { RouterTestingModule } from '@angular/router/testing'; | |
import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing'; | |
TestBed.initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting()); | |
describe('AppComponent', () => { | |
beforeEach(() => { | |
TestBed.configureTestingModule({ | |
declarations: [AppComponent], | |
imports: [RouterTestingModule] | |
}); | |
}); | |
it('should be able to test', async(() => { | |
const fixture = TestBed.createComponent(AppComponent); | |
fixture.whenStable().then(() => { | |
expect(true).toBe(true); | |
}); | |
})); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment