私は失敗しているunitestに詰まっているが、私はなぜ抑止力がない。角度2モックhttpポストunittestが失敗
私はテストしたいサービスがあります。 API urlへの簡単なサービス投稿。ここで
は、サービスimport { Injectable } from '@angular/core';
import { Http, Response, RequestOptions, Headers } from '@angular/http';
import { Observable } from 'rxjs/Observable';
import { environment } from '../../../environments/environment';
import 'rxjs/add/operator/map';
import { ICarrierDetails } from './carrier-details';
@Injectable()
export class CarrierService {
apiGatewayCartUri = environment.cartApiUri;
constructor(private http: Http) { }
getCarriersDetails(): Observable<ICarrierDetails[]> {
return this.http.post(this.apiGatewayCartUri + 'carriers/', {})
.map((response: Response) => <ICarrierDetails[]>response.json());
}
}
のためのコードであり、ここで私のスペックファイルです:
import { CarrierService } from './carrier.service'
import { Observable } from 'rxjs/Observable';
import { environment } from '../../../environments/environment';
import 'rxjs/add/observable/of';
describe('CarrierService',() => {
let carrierService: CarrierService;
let mockHttp;
let apiGatewayCartUri;
beforeEach(() => {
apiGatewayCartUri = environment.cartApiUri;
mockHttp = jasmine.createSpyObj('mockHttp', ['post'])
carrierService = new CarrierService(mockHttp)
});
describe('Should call http.post method with the right URL',() => {
mockHttp.post.and.returnValue(Observable.of(false));
carrierService.getCarriersDetails();
expect(mockHttp.post).toHaveBeenCalledWith(apiGatewayCartUri + 'carriers/', {});
});
});
そして、これは私がコンソールにすべての時間を取得する例外です:
クローム59.0.3071 (Mac OS X 10.12.5)CarrierService適切なURLでhttp.postメソッドを呼び出すと、宣言例外が発生するFAILED TypeError:undefのプロパティ 'post'を読み取ることができませんスイート内に を入れてください。 (http://localhost:9883/_karma_webpack_/main.bundle.js:97:17) at ZoneDelegate.webpackJsonp .../../../../zone.js/dist/zone.js.ZoneDelegate.invoke(http://localhost:9883/_karma_webpack_/polyfills.bundle.js:10672:26) at Zone.webpackJsonp .../.. /。 ./../zone.js/dist/zone.js.Zone.run(http://localhost:9883/_karma_webpack_/polyfills.bundle.js:10464:43) (スイート) (http://localhost:9883/_karma_webpack_/vendor.bundle.js:2195:29)Env.jasmineEnv。での (匿名関数)[0120] [as describe](http://localhost:9883/_karma_webpack_/vendor.bundle.js:2172:38) (スイート) (http://localhost:9883/_karma_webpack_/main.bundle.js:96:5) でZoneDelegate.webpackJsonp .../../../../zone.js/dist/zone.js.ZoneDelegate.invoke(http://localhost:9883/_karma_webpack_/polyfills.bundle.js:10672:26) でZone.webpackJsonp .../.. /。 ./../zone.js/dist/zone.js.Zone.run(http://localhost:9883/_karma_webpack_/polyfills.bundle.js:10464:43) (スイート) (http://localhost:9883/_karma_webpack_/vendor.bundle.js:2195:29)
私はこの部分が間違っていると思う 'carrierService =新しいCarrierServiceは(mockHttp)'、あなたはユニットテストではそのようなサービスを使用することはできません。テスト中のサービスについての詳しい説明http://chariotsolutions.com/blog/post/testing-angular-2-0-x-services-http-jasmine-karma/ – onetwo12