这里很少用尽,这可能就是为什么我的头衔不那么准确。
我正在为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
的对象?
请帮忙!
答案 0 :(得分:0)
TypeScript接口仅在编译期间存在,运行时对接口一无所知。
这是您创建实现接口的实例的方法:
interface itest
{
success:boolean;
}
let a:itest = {success: true}; //compiler checks that object matches interface itest