Angular2单元测试+创建接口的对象

时间:2016-06-20 11:53:46

标签: unit-testing angular

这里很少用尽,这可能就是为什么我的头衔不那么准确。

我正在为DummyService编写单元测试:

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

    @Injectable()
    export class DummyService {

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

请假设我从DummyData返回getAllDataSources个对象的列表。

现在,我在同一服务文件中有一个虚拟数据的结构/接口:

 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的对象?

请帮忙!

1 个答案:

答案 0 :(得分:0)

TypeScript接口仅在编译期间存在,运行时对接口一无所知。

这是您创建实现接口的实例的方法:

interface itest
{
    success:boolean;
}

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