簡體   English   中英

Angular2單元測試+創建接口的對象

[英]Angular2 unit test + creating object of an interface

這里很少用盡,這可能就是為什么我的頭銜不那么准確。

我正在為我的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對象列表。

現在,我在同一個服務文件中有一個虛擬數據的結構/接口:

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

我試着為這項服務編寫單元測試:

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

這個單元測試看起來很有趣,因為我真的沒有調用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的對象?

請幫忙!

TypeScript接口僅在編譯期間存在,運行時對接口一無所知。

這是您創建實現接口的實例的方法:

interface itest
{
    success:boolean;
}

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM