2016-04-07 12 views
1

http.MockBackendinjectAsyncを使用する際に問題があります。 auth.ngOnInit()方法はHttp.get()を呼び出しますが、このテストでMockBackend.connections.toPromise().then()メソッドが呼び出されることはありません:Angular2テスト非同期Http.MockBackend.connectionsはお約束しません

it('should check if the user is authenticated', 
    injectAsync([Auth, MockBackend], (auth, backend) => { 
    let promise = backend.connections.toPromise().then(
     (connection) => { 
     let link = document.createElement('a'); 
     link.href = connection.request.url; 
     expect(link.pathname).toBe('/api/auth/user/'); 
     }); 
    auth.ngOnInit(); 
    return promise; 
})); 

私はMockBackend.connections.next()メソッドが呼び出されているデバッガで確認されました。しかし、テストを実行すると失敗しますError: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.私はここで何が欠けていますか?

+1

クイックチェック - もしあなたが 'debugger'を削除するなら、同じ問題? – alecxe

+1

@alecxeいいキャッチ、ありがとう!それなしでも同じ結果。 –

+1

ありがとうございます、 'auth.ngOnInit()'の部分はどうでしょうか?コメントアウトするとタイムアウトになりますか? – alecxe

答えて

0

@alxhubと@ericmartinezr in gitterのおかげで、私はtoPromise()を呼び出す前に観測値を1つの結果に絞り込む必要があるという問題があります。これはうまく動作します:

it('should check if the user is authenticated', 
    injectAsync([Auth, MockBackend], (auth, backend) => { 
    let promise = backend.connections.first().toPromise().then(
     (connection) => { 
     let link = document.createElement('a'); 
     link.href = connection.request.url; 
     expect(link.pathname).toBe('/api/auth/user/'); 
     }); 
    auth.ngOnInit(); 
    return promise; 
})); 
関連する問題