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);
 | |
|   });
 | |
| } |