在这里筋疲力尽,这就是为什么我的标题不太准确。
我正在为我的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
S功能以获取DummyData
的列表。
我之所以这样做,是因为我遇到了一些问题,因此我无法看到我的测试。我做了一些研究,花了整整一天的时间,最后发现这种结构DummyData
是罪魁祸首。当我尝试在单元测试中创建它的对象时,我向自己证明了这一点(在上面的代码中),并且得到以下错误:
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