2017-04-12 46 views
2

我尝试使用茉莉花测试一个组件&噶,但是当我想测试我的服务是否已在ngOnInit()中调用时出现错误我不明白:单元测试 - 服务在ngOnInit:错误'地图不是函数'

Failed: Uncaught (in promise): TypeError: tagelers.map is not a function 
TypeError: tagelers.map is not a function 
    at tagelerService.getTagelers.then (http://localhost:9876/base/src/test.ts?779e448059ef6555f776fac9a62a71930cc82ee7:68007:38) 
    .... 

我的组件看起来是这样的:

import .. 

@Component({ 
    selector: 'app-group-details', 
    templateUrl: 'group-details.component.html', 
    styleUrls: ['group-details.component.css'], 
}) 

export class GroupDetailsComponent implements OnInit { 
    @Input() 
    tageler: Tageler; 
    tagelers: Tageler[]; 
    group: Group; 

    constructor(
    private route: ActivatedRoute, 
    private groupService: GroupService, 
    private tagelerService: TagelerService) { 
    } 

    ngOnInit() { 
    console.log("Init Details"); 
    this.route.params 
     .switchMap((params: Params) => this.groupService.getGroup(params['id'])) 
     .subscribe(group => this.group = group); 

    this.tagelerService 
     .getTagelers() 
     .then((tagelers: Tageler[]) => { 
     this.tagelers = tagelers.map((tageler) => { 
      if (!tageler.title) { 
      tageler.title = 'default'; 
      } 
      return tageler; 
     }); 
     }); 
    } 
} 

这是该方法看起来像在tagelerService:

getTagelers(): Promise<Tageler[]> { 
return this.http.get(this.tagelersUrlGet) 
    .toPromise() 
    .then(response => response.json() as Tageler[]) 
    .catch(this.handleError); 
} 

这我的测试是我spec.ts文件失败:

it('should get tagelers when ngOnInit is called', async(() => { 
    spyOn(tagelerService, 'getTagelers').and.returnValue(Promise.resolve(Tageler)); 
    component.ngOnInit(); 
    fixture.detectChanges(); 
    expect(tagelerService.getTagelers).toHaveBeenCalled(); 
})); 

有谁知道为什么有一个“.MAP不是一个函数”的错误?我猜这个问题是'spyOn'的错误实现(它不会返回我所需要的),但我不知道如何改变它。

感谢您的帮助!

回答

1

您正试图使用​​您的Tageler类(它只是一个Function,它没有map方法)来解决。

and.returnValue(Promise.resolve(Tageler)); 

您需要Tageler实例

这里的实际阵列来解决是哪里出了问题是你ngOnInit

this.tagelers = tagelers.map((tageler) => { 

tagelers是一个函数(Tageler类),但它需要数组

+0

谢谢,这工作! – Ramona