0
Observablesとngrxストアを使用するAngular 2サービスをテストしようとしています。私はほとんどのテストを通過しているが、私のテストの1つでは、私は正しく実行していると信じているHTTP呼び出しを模擬しようとしているが、問題は「注入」ステートメントのコードが実際に実行されていないことである。カルマ/ジャスミンテストアンギュラ2サービス内でコードを実行しない
@Injectable()
export class FirmService {
public stateObservable: Observable<FirmState>;
constructor(private $http: AuthHttp, private store: Store<FirmState>) {
// whatever reducer is selected from the store (in line below) is what the "this.store" refers to in our functions below.
// it calls that specific reducer function
this.stateObservable = this.store.select('firmReducer');
}
public getFirms(value?: string) {
return this.$http.get('/api/firm').map((response: Response) => {
this.store.dispatch({
type: firmActions.GET_FIRMS,
payload: response.json()
});
return;
});
}
}
getFirmsのための私のテスト: はTypeError:
beforeEach(() => {
TestBed.configureTestingModule({
imports: [HttpModule, AppModule],
providers: [
{ provide: XHRBackend, useClass: MockBackend },
FirmService
]
}));
// using these mock firms in other tests as well
firms = {
firms: [
{
'name': 'ICBC', 'country': 'United States', 'industry': 'Financial Services',
'edfModels': [{ 'name': 'US FIN 4.0', 'QO': false }, { 'name': 'US FIN 4.0', 'QO': true }],
'lgdModels': [{ 'name': 'US FIN 4.0', 'QO': false }, { 'name': 'US FIN 4.0', 'QO': true }],
'modifiedOn': '1/1/2016', 'modifiedBy': 'John Doe'
},
{
'name': 'CCBC', 'country': 'United States', 'industry': 'Financial Services',
'edfModels': [{ 'name': 'US FIN 4.0', 'QO': false }, { 'name': 'US FIN 4.0', 'QO': true }],
'lgdModels': [{ 'name': 'US FIN 4.0', 'QO': false }, { 'name': 'US FIN 4.0', 'QO': true }],
'modifiedOn': '1/1/2016', 'modifiedBy': 'John Doe', 'selected': true
}
]
};
});
it('getFirms should dispatch the GET_FIRMS action', inject([FirmService, XHRBackend], (firmServiceMock, mockBackend) => {
const expectedAction = {
type: firmActions.GET_FIRMS,
payload: firms
};
mockBackend.connections.subscribe((connection) => {
connection.mockRespond(new Response(new ResponseOptions({
body: JSON.stringify(firms)
});
}));
spyOn(mockStore, 'dispatch');
firmServiceMock.getFirms().subscribe(() => {
expect(mockStore.dispatch).toHaveBeenCalled();
expect(mockStore.dispatch).toHaveBeenCalledWith(expectedAction);
});
}));
誰もが私は私のspecファイルでこのエラーを削除するために何をする必要があるかを教えてもらえます。http.get(...)マップ(... ).toPromiseは関数ではありません。
私のサービスでhttpコールを実行してはいけません。
ありがとうございました。私はそれを実際の宣言に移動しなければならなかったようです。私のコードを更新しましたが、今はこのエラーが発生しています: "TypeError:http.get(...)。map ... ).toPromiseは "私のfirmServiceMock.getFirms()。subscribe行のコードに到達すると関数ではありません"。私はこの解決策を試みた:https://stackoverflow.com/questions/39121286/angular2-typeerror-this-http-get-topromise-is-not-a-function。しかし、私はエラーが停止しますが、私の購読関数内でコードは実行されないと付け加えます。私もテストしているサービスを追加しました。ありがとう – bschmitty