2016-04-15 17 views
2

私は私のテストが2回実行されているAngular2 HTTP呼び出しのテストは二回実行

@Component({ 
    selector: 'Techs', 
    template: '', 
    providers: [HTTP_PROVIDERS] 
}) 
export class Techs { 
    public techs: Tech[]; 

    constructor(http: Http) { 
    http 
     .get('src/app/techs/techs.json') 
     .map(response => response.json()) 
     .subscribe(result => this.techs = result); 
    } 
} 

単純なコンポーネントとAngular2アプリを持っています

クローム49.0.2623する(Mac OS X 10.11.4) :実行さ6の0 SUCCESS(0秒/ 0秒)

LOG: 'テストの終わり'

クロム49.0.2623する(Mac OS X 10.11.4):実行さ6 6のSUCCESS(0.182私は、HTTPのテストを1回だけ実行され呼び出す削除する場合秒/ 0.153秒)しかし

クローム49.0.2623する(Mac OS X 10.11.4):実行される6 SUCCESSの6(0.182ここでは秒/ 0.153秒)

は私のテスト

describe('techs component',() => { 
    it('should render 3 elements <tech>', injectAsync([TestComponentBuilder], (tcb: TestComponentBuilder) => { 
    return tcb 
     .createAsync(Techs) 
     .then(fixture => { 
     fixture.componentInstance.techs = [{}, {}, {}]; 
     fixture.detectChanges(); 
     const techs = fixture.nativeElement; 
     expect(techs.querySelectorAll('tech').length).toBe(3); 
     }); 
    })); 
}); 

答えて

0

である私はあなたの問題は、非同期のASPEから来ていると思いますあなたのHTTPコールのct。もう一つの方法は、あなたのHTTPオブジェクトは、HTTP呼び出しをシミュレートするためにモックになり

  • :私はこれを修正する2つの方法を見ることになります。これは、MockBackendクラスを使用して行うことができます。ここで

XHRBackendクラスに対してそれを設定することです:

beforeEachProviders(() => { 
    return [ 
    HTTP_PROVIDERS, 
    provide(XHRBackend, { useClass: MockBackend }), 
]; 
}); 

、あなたが反応して欲しいものを返す方法:

it('Should return a list of dogs', inject([XHRBackend, HttpService, Injector], (mockBackend, httpService, injector) => { 
    mockBackend.connections.subscribe(
    (connection: MockConnection) => { 
     connection.mockRespond(new Response(
     new ResponseOptions({ 
      body: [ { name: 'test' }, ... ] 
     }))); 
    } 
    (...) 
+0

ありがとうございました。私はすでにHttpリクエストを模倣しようとしましたが、それと同じです... 'fakeAsync'については、最初のメソッド(Hockpバックエンドを嘲笑)と組み合わせて使うべきでしょうか? – rocketer

+0

あなたは両方とも試してみることができます。 FakeAsyncでは、手動でマイクロタスクをトリガすることができます。この質問を参照してください:http://stackoverflow.com/questions/35990253/does-fakeasync-guarantee-promise-completion-after-tick-flushmicroservice/35991133?s=0|2.5647#35991133 –

+0

それ以外の場合、テストをどのように実行しますか? –

関連する問題