103 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			103 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|  | import {FunctionWithParamTokens, injectAsync,RootTestComponent, TestComponentBuilder} from 'angular2/testing'; | ||
|  | import {By} from 'angular2/angular2' | ||
|  | 
 | ||
|  | ///////// Should be in testing  ///////// | ||
|  | 
 | ||
|  | export type DoneFn = { | ||
|  |   fail: (err?:any) => void, | ||
|  |   (done?:any): () => void | ||
|  | } | ||
|  | 
 | ||
|  | ///////// injectAsync extensions /// | ||
|  | 
 | ||
|  | type PromiseLikeTestFn = (...args:any[]) => PromiseLike<any>; | ||
|  | type PromiseLikeTcbTestFn = (tcb: TestComponentBuilder, ...args:any[]) => PromiseLike<any>; | ||
|  | 
 | ||
|  | /** Run an async component test within Angular test bed using TestComponentBuilder | ||
|  | // Example | ||
|  | //    it('async Component test', tcb => { | ||
|  | //      // your test here | ||
|  | //      // your test here | ||
|  | //      // your test here | ||
|  | //      return aPromise; | ||
|  | //    }); | ||
|  | // | ||
|  | // May precede the test fn with some injectables which will be passed as args AFTER the TestComponentBuilder | ||
|  | // Example: | ||
|  | //    it('async Component test w/ injectables', [HeroService], (tcb, service:HeroService) => { | ||
|  | //      // your test here | ||
|  | //      return aPromise; | ||
|  | //    }); | ||
|  | */ | ||
|  | export function injectTcb(testFn: (tcb: TestComponentBuilder) => PromiseLike<any>): FunctionWithParamTokens; | ||
|  | export function injectTcb(dependencies: any[], testFn: PromiseLikeTcbTestFn): FunctionWithParamTokens; | ||
|  | export function injectTcb(dependencies: any[] | PromiseLikeTcbTestFn, testFn?: PromiseLikeTcbTestFn) { | ||
|  | 
 | ||
|  |   if (typeof dependencies === 'function' ){ | ||
|  |     testFn = <PromiseLikeTcbTestFn>dependencies; | ||
|  |     dependencies = []; | ||
|  |   } | ||
|  | 
 | ||
|  |   return injectAsync([TestComponentBuilder, ...(<any[]>dependencies)], testFn); | ||
|  | } | ||
|  | ///////// inspectors and expectations ///////// | ||
|  | 
 | ||
|  | export function getSelectedHtml(rootTC: RootTestComponent, selector: string) { | ||
|  |   var debugElement = rootTC.debugElement.query(By.css(selector)); | ||
|  |   return debugElement && debugElement.nativeElement && debugElement.nativeElement.innerHTML; | ||
|  | } | ||
|  | 
 | ||
|  | export function expectSelectedHtml(rootTC: RootTestComponent, selector: string) { | ||
|  |   return expect(getSelectedHtml(rootTC, selector)); | ||
|  | } | ||
|  | 
 | ||
|  | export function getSelectedClassName(rootTC: RootTestComponent, selector: string) { | ||
|  |   var debugElement = rootTC.debugElement.query(By.css(selector)); | ||
|  |   return debugElement && debugElement.nativeElement && debugElement.nativeElement.className; | ||
|  | } | ||
|  | 
 | ||
|  | export function expectSelectedClassName(rootTC: RootTestComponent, selector: string) { | ||
|  |   return expect(getSelectedClassName(rootTC, selector)); | ||
|  | } | ||
|  | 
 | ||
|  | export function getViewChildHtml(rootTC: RootTestComponent, elIndex: number = 0) { | ||
|  |   let child = rootTC.debugElement.componentViewChildren[elIndex]; | ||
|  |   return child && child.nativeElement && child.nativeElement.innerHTML | ||
|  | } | ||
|  | 
 | ||
|  | export function expectViewChildHtml(rootTC: RootTestComponent, elIndex: number = 0) { | ||
|  |   return expect(getViewChildHtml(rootTC, elIndex)); | ||
|  | } | ||
|  | 
 | ||
|  | export function expectViewChildClass(rootTC: RootTestComponent, elIndex: number = 0) { | ||
|  |   let child = rootTC.debugElement.componentViewChildren[elIndex]; | ||
|  |   return expect(child && child.nativeElement && child.nativeElement.className); | ||
|  | } | ||
|  | 
 | ||
|  | export function dispatchEvent(element: Element, eventType: string) { | ||
|  |   element.dispatchEvent(new Event(eventType)); | ||
|  | } | ||
|  | 
 | ||
|  | /** Let time pass so that DOM or Ng can react | ||
|  | // returns a promise that returns ("passes through") | ||
|  | // the value resolved in the previous `then` (if any) | ||
|  | // after delaying for [millis] which is zero by default. | ||
|  | // Example (passing along the rootTC w/ no delay): | ||
|  | //     ... | ||
|  | //     return rootTC;  // optional | ||
|  | //   }) | ||
|  | //   .then(tick) | ||
|  | //   .then(rootTC:RTC => { .. do something ..}); | ||
|  | // | ||
|  | // Example (passing along nothing in particular w/ 10ms delay): | ||
|  | //     ... | ||
|  | //     // don't care if it returns something or not | ||
|  | //   }) | ||
|  | //   .then(_ => tick(_, 10)) // ten milliseconds pass | ||
|  | //   .then(() => { .. do something ..}); | ||
|  | */ | ||
|  | export function tick(passThru?: any, millis: number = 0){ | ||
|  |   return new Promise((resolve, reject) =>{ | ||
|  |     setTimeout(() => resolve(passThru), millis); | ||
|  |   }); | ||
|  | } |