2016-09-21 5 views
3

비교적 고립 된 Pipe에 대한 테스트를 구현하려고합니다. angular-cli (@angular 2.0.0)의 최신 버전을 사용하고 있습니다.의존성이있는 각진 2 각형 파이프 테스트

import { Pipe, PipeTransform } from "@angular/core"; 
import { DatePipe, JsonPipe } from "@angular/common"; 

@Pipe({name: 'dataTableFormat'}) 
export class DataTablePipe implements PipeTransform { 

    // values with type 'json' are parsed to json. As a result, string values may be displayed with quotes ("<string>"). 
    // To avoid that, we remove these quotes with this regex 
    private quotesExp: RegExp = /^\"|\"$/gi; 

    constructor(private datePipe: DatePipe, private jsonPipe: JsonPipe) { 
    } 

    transform(value: string, type: string): string { 
    switch (type) { 
     case "date": 
      return this.datePipe.transform(value, 'short'); 
     case "json": 
      return this.jsonPipe.transform(value).replace(this.quotesExp, ""); 
     default: 
      return value; 
    } 
    } 
} 

및 사양 코드는 다음과 같습니다 :

파이프 코드는

import {TestBed} from "@angular/core/testing"; 
import {DataTablePipe} from "./data-table.pipe"; 
import {DatePipe, JsonPipe} from "@angular/common"; 

describe('DataTableFormat',() => { 

    beforeEach(() => { 
     TestBed.configureTestingModule({ 
      declarations: [ DataTablePipe ], 
      providers: [ 
       DatePipe, JsonPipe 
      ] 
     }); 
    }); 

    it('sanity',() => { 
     expect(true).toBeTruthy(); 
    }); 

    it('should transform ',() => { 
     let fixture = TestBed.createComponent(DataTablePipe); 
     let comp = fixture.componentInstance; 
     let testDate:Date = new Date(); 
     let datePipe = fixture.debugElement.injector.get(DatePipe); 

     expect(comp.transform(testDate.toString(), 'date')).toBe(datePipe.transform(testDate)); 

    }); 
}); 

정신의 테스트를 통과하지만, 실제 테스트는 오류와 함께 실패 :

Error: Cannot create the component DataTablePipe as it was not imported into the testing module! 
    at TestBed.createComponent (webpack:///Users/sninio/dev/csp-ui-ng/~/@angular/core/bundles/core-testing.umd.js:1144:0 <- src/main/js/test.ts:6022:23) 
    at Function.TestBed.createComponent (webpack:///Users/sninio/dev/csp-ui-ng/~/@angular/core/bundles/core-testing.umd.js:972:0 <- src/main/js/test.ts:5850:33) 
    at Object.<anonymous> (webpack:///Users/sninio/dev/csp-ui-ng/src/main/js/app/pages/+platform/events/data-table/data-table.pipe.spec.ts:23:30 <- src/main/js/test.ts:14770:41) 
    at ZoneDelegate.invoke (webpack:///Users/sninio/dev/csp-ui-ng/~/zone.js/dist/zone.js:203:0 <- src/main/js/test.ts:26741:28) 
    at ProxyZoneSpec.onInvoke (webpack:///Users/sninio/dev/csp-ui-ng/~/zone.js/dist/proxy.js:72:0 <- src/main/js/test.ts:18285:39) 
    at ZoneDelegate.invoke (webpack:///Users/sninio/dev/csp-ui-ng/~/zone.js/dist/zone.js:202:0 <- src/main/js/test.ts:26740:34) 
    at Zone.run (webpack:///Users/sninio/dev/csp-ui-ng/~/zone.js/dist/zone.js:96:0 <- src/main/js/test.ts:26634:43) 
    at Object.<anonymous> (webpack:///Users/sninio/dev/csp-ui-ng/~/zone.js/dist/jasmine-patch.js:91:27 <- src/main/js/test.ts:18021:50) 

I 내가 놓친 구성이 맞는지는 모르겠지만 어떤 이유에서 DataTablePipe을 th로 가져 오지 못했습니다. 전자 테스트 모듈 ...

아이디어가 있으십니까?

답변

6

TestBed.createComponent은 엄격하게 구성 요소를 만드는 데 사용됩니다. 그래도 할 수있는 것은 DatePipeJsonPipe을 테스트에 삽입하는 것입니다. 그냥 그들로부터 파이프를 만듭니다.

import { inject } from '@angular/core/testing'; 

it('should transform ', inject([DatePipe, JsonPipe], (datePipe, jsonPipe) => { 
    let pipe = new DataTablePipe(datePipe, jsonPipe); 
    let testDate: Date = new Date(); 

    expect(pipe.transform(testDate.toString(), 'date')) 
     .toBe(datePipe.transform(testDate, 'short')); 
})); 
+0

이것은 작동하지 않습니다. 누락 된 공급자 오류가 발생합니다. 오류 : DatePipe에 대한 공급자가 없습니다! src/main/js/test.ts –

+1

테스트했을 때 잘 작동했습니다. 내가 게시 한 정확한 코드를 사용했습니다. 방금'TestBed'에서'선언문 '을 삭제했습니다. 그 외에, 내 대답에 게시 한 것을 제외하고 모두 동일합니다 –

+0

angular-cli로 테스트 했습니까? 나는 그것이 실종 된 일부 구성이라고 확신한다. –