2016-06-20 5 views
1

ここでは少し疲れているかもしれませんが、私のタイトルはそれほど正確ではありません。Angular2ユニットテスト+インターフェイスのオブジェクトを作成する

私は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; 
     } 

は今、私は、同じサービス・ファイル内のダミーデータのための構造/インタフェースを持っています私は実際にDummyDataのリストを取得する機能をDummyServiceと呼んでいないので、少し面白いです。

私は私のテストを見ることができなかったので、私はいくつかの問題を抱えていたので、私はこれをやっています。私はいくつかの研究を行い、一日を過ごし、最終的にこの構造体が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 
関連する問題