2016-06-20 3 views
1

여기에 거의 다 써 버릴 수 없기 때문에 내 제목이 그렇게 정확하지 않을 수 있습니다.Angular2 unit test + 인터페이스의 객체 생성

나는 나의 DummyService에 대한 단위 테스트를 쓰고 있어요 :

import {Injectable} from '@angular/core'; 

    @Injectable() 
    export class DummyService { 

     getAllDataSources():Promise<Array<DummyData>> { 
      return new Promise<DummyData[]>(resolve => 
       setTimeout(()=>resolve([]), 1000) // 1 seconds 
      ); 
     } 
    } 

getAllDataSources에서 DummyData 개체의 목록을 반환하고 가정하십시오.

import {DummyService, DummyData} from './dummy.service'; 
import { 
    beforeEachProviders 
} from '@angular/core/testing'; 

import {provide} from '@angular/core'; 

export function main() { 

    describe('dummy.service',() => { 
     let dsService:DummyService; 

     it('should fetch data',()=> { 
      dummyData: DummyData = new DummyData(); // >>>> culprit... 
      expect(1).toEqual(1); 
     }); 
    }); 
} 

이 단위 테스트가 보인다 :이 서비스에 대한 단위 테스트를 작성하려고

export interface DummyData{ 
      Name:string; 
      IsActive:boolean; 
     } 

:

지금, 나는 동일한 서비스 파일에 더미 데이터에 대한 구조/인터페이스를 나는 실제로 DummyService을 호출하여 DummyData의 목록을 가져 오는 기능이 거의 없습니다.

나는 내 테스트를 볼 수 없었기 때문에 약간의 문제가 발생했기 때문에이 작업을 수행하고 있습니다. 나는 약간의 연구를했고, 하루 종일 보냈고 마침내이 구조 DummyData가 CULPRIT이라는 것을 알게되었습니다. 나는 ( 위의 코드에서 )를 내 단위 테스트에서 그것의 객체를 생성하려고 할 때 나는 나 자신에게 이것을 증명하고 나는 다음과 같은 오류 있어요 :

그래서
FAILED TESTS: 
    dummy.service 
    ✖ should fetch data 
     PhantomJS 2.1.1 (Linux 0.0.0) 
     Chrome 50.0.2661 (Linux 0.0.0) 
    ReferenceError: **DummyData is not defined** 
     at eval (/home/aodev/WebstormProjects/Data Federation App/data-mapping-app/dist/dev/app/shared/datasource.service.spec.js:8:28) 
     at Object.eval (/home/aodev/WebstormProjects/Data Federation App/data-mapping-app/node_modules/@angular/core/testing/testing.js:80:25) 

이, 누군가가 제발 말할 수있는, 내가 무슨 생각을 잘못하고있는거야? 내 단위 테스트에서 DummyData의 개체를 만들 수없는 이유는 무엇입니까?

도와주세요!

+0

을 어쩌면 당신의'DummyService' 파일에'DummyData'에 대한 누락 된 수입. –

+0

위 코드에서'DummyData'는 클래스가 아니라 인터페이스입니다. 인터페이스를 인스턴스화 할 수 없습니다. 그들은 수업이 아니기 때문에. – estus

답변

0

TypeScript 인터페이스는 컴파일 타임에만 존재하며 런타임은 인터페이스에 대해 아무것도 모릅니다.

이것은 당신이 인터페이스를 구현하는 인스턴스를 만드는 방법은 다음과 같습니다

interface itest 
{ 
    success:boolean; 
} 

let a:itest = {success: true}; //compiler checks that object matches interface itest