为什么我的Jasmine测试不在for循环中执行应用程序代码?

时间:2017-09-25 21:02:29

标签: unit-testing typescript for-loop jasmine

假设我有一个带for语句的简单函数:

public addIcons(icons): void {
    for (let icon of icons) {
        this.iconRegistry.addSvgIcon(icon['name'], icon['path']);
    }
}

如果我试图监视iconRegistry.addSvgIcon,则测试失败。如果我修改应用以在addSvgIcon循环之外调用for,则会传递。

it('should add icons to the registry', inject([IconService, MdIconRegistry], (
  service: IconService, 
  iconRegistry: MdIconRegistry) => {
    spyOn(iconRegistry, 'addSvgIcon');
    service.addIcons({ 'name': 'blah', 'path': 'blech' });
    expect(iconRegistry.addSvgIcon).toHaveBeenCalled();
}));

控制台日志表明正在调用addIcons函数,但未输入for语句。为什么不呢?

1 个答案:

答案 0 :(得分:1)

我不是使用Typescript的专家,但是您将一个对象作为参数传递给addIcons,它需要一个数组。

更改此行:

service.addIcons({ 'name': 'blah', 'path': 'blech' });

到此:

service.addIcons([{ 'name': 'blah', 'path': 'blech' }]);