【发布时间】:2016-06-20 11:53:45
【问题描述】:
这里有点累,可能这就是我的标题不太准确的原因。
我正在为我的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);
});
});
}
这个单元测试看起来有点搞笑,因为我真的没有调用DummyServices 函数来获取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 的对象?
请帮忙!
【问题讨论】:
-
可能在您的
DummyService文件中缺少对DummyData的导入。 -
从上面的代码看来,
DummyData是一个接口而不是一个类。接口不能被实例化。因为它们不是类。
标签: unit-testing angular