2017-04-12 16 views
2

Jasmine &カルマを使用してコンポーネントをテストしようとしましたが、私のサービスがngOnInit()で呼び出されたかどうかをテストしたいときにエラーが発生します私は理解していないこと:ユニットテスト - ngOnInitのサービス: 'map is not function'

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

関連する問題