我是Angular的新手,目前正在为我的应用程序编写单元测试。我真的很困惑,似乎无法为当前任务编写单元测试。 我的组件使用以下方法:
for (let i = 0; i < Object.keys(prop.Properties).length; i++) {
console.log(i);
let k = Object.keys(prop.Properties)[i];
if (prop.Properties[k]['Dependencies'].length == 0) {
console.log(prop.Properties[k]['Url']);
console.log('hi');
$.getJSON(prop.Properties[k]['Url']).done(function (jsres) {
console.log(prop.Properties[k]['Url']);
});
} else {
console.log('hello');
}
}
它使用两种服务,即modeService和levelService。
我的LevelService.ts看起来像这样
async updateLevelModes(level: Level) {
const updateModes: Promise<any>[] = [];
for(let mode of level.Modes) {
const updateMode = this.modeService.updateMode(mode);
updateModes.push(updateMode);
}
await Promise.all(updateModes);
const update = await this.LevelService.updateLevel(level);
level.Id = update._id;
}
如何为这种复杂的方法编写测试?请帮助
答案 0 :(得分:0)
并不是真正的“复杂”方法:
在提供的代码中,您需要两个模拟和一个期望值:
it('should update the level ID', () => {
const newID = 5;
spyOn(component['modeService'], 'updateMode').and.returnValue(Promise.resolve(true));
spyOn(component['modeService'], 'updateLevel').and.returnValue(Promise.resolve({ id: newID }));
component.updateLevelModes(component.level);
expect(component.level.id).toEqual(newID);
});
因为您要对组件进行单元测试,所以应该模拟依赖项。如果您不这样做,则期望您的测试非常随机且难以实施。
这意味着,如果您模拟服务,则不必知道它的作用,而只需要知道它会返回带有ID的新级别。
从商业角度而言,此测试是防止副作用所需的全部。