2017-07-21 8 views
1

私のコンポーネントのngOnInit()で、私はUserService約束の呼び出しを行うgetAllUsersメソッドを呼び出しています。私は単にこのテストを作りたい:カルマが約束を含む空白を待つ

getAllUsers() { 
    this._userService.getAllUsers().toPromise().then(
     data => { 
      this.users = data["users"] 
     }, error => {} 
    ) 
} 

と私MockUserServiceに私はgetAllUsersを(持っている:このようなgetAllUsersと

ngOnInit() { 
     this.getAllUsers() 
} 

it('should get initialized', async(inject([MockBackend], (backend: MockBackend) => { 
    spyOn(component, "getAllUsers") 

    component.ngOnInit() 

    expect(component.getAllUsers).toHaveBeenCalled() 
    expect(component.users).not.toBeNull() 
    expect(component.users.length).toBe(2) 
    }))) 

は、だから私のコードで私はこれを持っています)そのように:

getAllUsers(): Observable<any> { 
    return Observable.of({ 
     "success": true, 
     "users": [ User.testUser(), User.testUser() ] 
    }) 
} 

事は私のコードのいくつかの点でいくつかのconsole.infoを置くことです、そして、私は期待ラインがcomponent.getAllUsersの中に入る前に呼ばれることがわかります。

ngOnInit()が完了するのを待つ方法はありますか?ありがとう!

答えて

1

ngOnInitの実行が完了するまで待つ必要があります。 fixture.whenStable()を使用します。非同期呼び出しが完了すると、そのブロック内のコードが実行されます。

it('should get initialized', async(inject([MockBackend], (backend: MockBackend) => { 

fixture = TestBed.createComponent(ComponentName); // replace with the name of your component 
    spyOn(component, "getAllUsers") 

    component.ngOnInit(); 
    fixture.detectChanges(); 
    fixture.whenStable().then(() => { 
      expect(component.getAllUsers).toHaveBeenCalled() 
      expect(component.users).not.toBeNull() 
      expect(component.users.length).toBe(2) 
    }); 
    }))) 
+0

ありがとうございました!不思議なことに、それはgetAllUsersの中に入っているようにも見えません。私は 'this.getAllUsers()'の直前にロガーを入れ、getAllUsers()の最初の行に1つを入れて、これも印刷されませんでした。 – Guigui

+1

getAllUsers () ''は2つのパラメータを期待していますが、ここに 'params'を送信していません。それはあなたにエラーを投げているはずです。 –

+0

申し訳ありません私は間違っていることができないものを削除する必要があることを簡素化しようとすると、私の側でstackoverflowのものを置く間違いです。 – Guigui

関連する問題