2016-09-10 6 views
0

実際のバックエンドでhttp注入を使用してジャスミンテストを実現するにはどうすればよいですか?実際の接続でHTTPをジャスミンに注入する方法

私は本当のhttp接続

import { provide }            from '@angular/core'; 
import{ClassCall} from 'xx.xx' 

import {HTTP_PROVIDERS, XHRBackend, Http} from "@angular/http"; 
import {MockBackend} from "@angular/http/testing/mock_backend"; 
import {beforeEachProviders} from "@angular/core/testing/testing"; 
import {inject} from "@angular/core/testing/test_injector"; 
import {async} from "@angular/core/testing/async"; 



describe('HttpService Tests',() => { 
    beforeEachProviders(() => { 
    return [ 
     HTTP_PROVIDERS, 
     Http, 
     ClassCall, 
     provide(ClassCall, {useClass: Http}), 
    ]; 
    }) 

    it('should return response when subscribed to postRequest', 
     async(inject([ClassCall], (myCall: ClassCall) => { 

     myCall.Call("hey", "there") 
      .then((response)=>{ 
      expect(response).toBe("anyResponse") 
      }) 
     }))); 
    }); 

を使用して、私のサービスをテストしたいことを意味し、私はそれについてのトピックを見ていない....

感謝を!!!!!

答えて

0

Asを使用する必要がありますigorzgは、rc4の正しい方法は、

beforeEach(() => { 
    addProviders([MyService, Http, ConnectionBackend, HTTP_PROVIDERS, XHRBackend]); 
}); 
0

RC.5以降、モジュールの設定にはTestBed.configureTestingModuleを使用する必要があります。

だから、beforeEachProvidersでのテストケースには、あなたが例えばそれを使用する必要があります。

class HttpMock { 
    post(url, content, requestOptions) { 
     return { 
     toPromise() { 
      return Promise.resolve(url); 
     } 
     } 
    } 

    } 


describe('HttpService Tests',() => { 
    let countryMock = new CountryMock(); 
    let navigationMock = new NavigationServiceMock(); 
    let httpMock = new HttpMock(); 
    beforeEach(() => { 
    TestBed.configureTestingModule({ 
     providers: [ 
     {provide: Http, useValue: httpMock}, 
     {provide: CountryService, useValue: countryMock}, 
     {provide: NavigationService, useValue: navigationMock}, 
     AuthService 
     ] 
    }); 
    }); 
    it('should check canActivate and set country de/login', inject([AuthService], (auth: AuthService) => { 
    expect(auth).toBeTruthy(); 
    spyOn(countryMock, "getCountry").and.returnValue({code: 'de'}); 
    spyOn(auth, "isLoggedIn").and.returnValue(false); 
    spyOn(navigationMock, "navigateByUrl").and.callThrough(); 
    expect(auth.canActivate()).toBeFalsy(); 
    expect(auth.isLoggedIn).toHaveBeenCalled(); 
    expect(navigationMock.navigateByUrl).toHaveBeenCalledWith('de/login'); 
    })); 
}); 
+0

お返事ありがとうございます。しかし、私はIonic 2を使用しているので、角度2.0.0.0rc4にロックされています... あなたのアドバイスに基づいてコードを変更しようとしました。 しかし、それはまだ動作しません.... 私はエラーが発生しました: 'AuthServiceのプロバイダなし... 注入がうまくいかないようです – charlesg

+0

あなたのonewクラスを置く必要がありますAuthServiceは私のサービスからの私の例です); – igorzg

+0

私の応答に示されているように動作していない – charlesg

0

はEDIT:rc.4にあなたがaddProviders

ライブ例https://plnkr.co/edit/XhIkgR92oHRH4rIotXCj?p=preview

import {addProviders, inject} from '@angular/core/testing'; 
import {MyService} from './myservice'; 

describe('my code',() => { 
    beforeEach(() => { 
    addProviders([MyService]); 
    }); 

    it('does stuff', inject([MyService], (service) => { 
    // actual test 
    })); 
}); 
+0

Aggr plnkr secに何か問題があります。私は別のものを作成します – igorzg

+0

https://plnkr.co/edit/XhIkgR92oHRH4rIotXCj?p=preview – igorzg

+0

素晴らしいタンク!!!非同期コンストラクタが挿入されるのを待つ方法も知っていますか? – charlesg

関連する問題