// App import { Component, Input } from 'angular2/core'; import { NgFor } from 'angular2/common'; @Component({ selector: 'list', template: '{{user}}', directives: [NgFor], }) export class ListComponent { @Input() public users: Array = []; } // App tests import { async, it, describe, expect, inject, beforeEach, beforeEachProviders, ComponentFixture, TestComponentBuilder, } from 'angular2/testing'; import { setBaseTestProviders } from 'angular2/testing'; import { TEST_BROWSER_PLATFORM_PROVIDERS, TEST_BROWSER_APPLICATION_PROVIDERS, } from 'angular2/platform/testing/browser'; setBaseTestProviders(TEST_BROWSER_PLATFORM_PROVIDERS, TEST_BROWSER_APPLICATION_PROVIDERS); describe('ListComponent', () => { it('should render list', inject([TestComponentBuilder], (tcb: TestComponentBuilder) => { return tcb.createAsync(ListComponent).then((componentFixture: ComponentFixture) => { const element = componentFixture.nativeElement; componentFixture.componentInstance.users = ['John']; componentFixture.detectChanges(); expect(element.querySelectorAll('span').length).toBe(1); }); })); }); // App DI class UserService { public users: Array = ['John']; } @Component({ selector: 'list', template: '{{ user }}', directives: [NgFor], }) class ListComponentBootstrapDI { private users: Array = []; constructor(userService: UserService) { this.users = userService.users; } } // App DI tests import { provide } from 'angular2/core'; class MockUserService { public users: Array = ['John', 'Steve']; } describe('ListComponent DI', () => { beforeEachProviders(() => [ provide(UserService, { useClass: MockUserService }) ]); it('should render list', inject([TestComponentBuilder], (tcb: TestComponentBuilder) => { return tcb.createAsync(ListComponentBootstrapDI).then((componentFixture: ComponentFixture) => { const element = componentFixture.nativeElement; componentFixture.detectChanges(); expect(element.querySelectorAll('span').length).toBe(2); }); })); }); // App DI for Component @Component({ selector: 'list', template: '{{ user }}', directives: [NgFor], providers: [UserService], }) class ListComponentComponentDI { private users: Array = []; constructor(userService: UserService) { this.users = userService.users; } } // App DI for Component tests describe('ListComponent DI Component', () => { it('should render list', inject([TestComponentBuilder], (tcb: TestComponentBuilder) => { tcb .overrideProviders( ListComponentComponentDI, [provide(UserService, { useClass: MockUserService })] ) .createAsync(ListComponentComponentDI).then((componentFixture: ComponentFixture) => { const element = componentFixture.nativeElement; componentFixture.detectChanges(); expect(element.querySelectorAll('span').length).toBe(2); }); })); }); // App final test describe('ListComponent Final', () => { beforeEach(async(inject([TestComponentBuilder], (tcb: TestComponentBuilder) => { tcb .overrideProviders( ListComponentComponentDI, [provide(UserService, { useClass: MockUserService })] ) .createAsync(ListComponentComponentDI) .then((componentFixture: ComponentFixture) => { this.listComponentFixture = componentFixture; }); }))); it('should render list', () => { const element = this.listComponentFixture.nativeElement; this.listComponentFixture.detectChanges(); expect(element.querySelectorAll('span').length).toBe(2); }); });