Http
get()
で返された応答を模擬する最も簡単な方法は、角2ですか?角2モックHttp get()でローカルのjsonファイルを返す
ローカルディレクトリdata.json
が作業ディレクトリにあり、残りのapiをシミュレートするペイロードとしてそのデータを含むレスポンスを返すようにします。
のBackend
オブジェクトを設定するためのドキュメントは、このような単純な作業のためにやや不明瞭で複雑すぎます。
Http
get()
で返された応答を模擬する最も簡単な方法は、角2ですか?角2モックHttp get()でローカルのjsonファイルを返す
ローカルディレクトリdata.json
が作業ディレクトリにあり、残りのapiをシミュレートするペイロードとしてそのデータを含むレスポンスを返すようにします。
のBackend
オブジェクトを設定するためのドキュメントは、このような単純な作業のためにやや不明瞭で複雑すぎます。
XhrBackend
プロバイダをMockBackend
プロバイダで上書きする必要があります。真のHTTP要求を実行できるように、別のインジェクタを作成する必要があります。ここで
はサンプルです:
beforeEachProviders(() => {
return [
HTTP_PROVIDERS,
provide(XHRBackend, { useClass: MockBackend }),
SomeHttpService
];
});
it('Should something', inject([XHRBackend, SomeHttpService], (mockBackend, httpService) => {
mockBackend.connections.subscribe(
(connection: MockConnection) => {
var injector = ReflectiveInjector.resolveAndCreate([
HTTP_PROVIDERS
]);
var http = injector.get(Http);
http.get('data.json').map(res => res.json()).subscribe(data) => {
connection.mockRespond(new Response(
new ResponseOptions({
body: data
})));
});
});
}));
調査の結果、私はもっと簡単に答えることができました.HTMLアドレスの代わりにURLとしてローカルjsonファイル(app/data.json)の場所を使用してください。 –
素晴らしい!より多くの詳細を持っていることに興味があります;-)リクエストは実際にどのように実行されますか? –
@ThierryTemplierリクエストは実サーバからのGETリクエストと同じように実行されますが、成功しなかったリクエストやMUTEENDを必要とするリクエストに対する動作をテストするなど、より微妙な手順が必要です。 –
ところで、あなたはXHRBackend
を模擬し、createDb
メソッドを持つクラスで嘲笑のデータを提供する必要があります。 createDb
メソッドは、模擬JSONオブジェクトを返します。たとえば、JSONオブジェクトが変数mockedObject
に含まれている場合は、"app\mockedObject"
になります。たとえば、URL
〜http.get
のデータをロードするには、正しいデータをロードします。
現在地の詳細を読むことができます:https://angular.io/docs/ts/latest/guide/server-communication.html.
は、あなたは私に、コアテストベッドを介して利用HttpTestingControllerを使用することができ、それがより直感的に感じている(もちろん、独自にそれぞれを、)。テストされていないスニペット:
import { TestBed, async } from '@angular/core/testing';
import { HttpTestingController } from '@angular/common/http/testing';
import { MyApiService } from './my-api.service';
export function main() {
describe('Test set',() => {
let httpMock: HttpTestingController;
beforeEach(() => {
TestBed.configureTestingModule({
imports: [],
providers: [MyApiService]
});
httpMock = TestBed.get(HttpTestingController);
});
it('should call get', async(() => {
const data: any = {mydata: 'test'};
let actualResponse: any = null;
MyApiService.get().subscribe((response: any) => {
actualResponse = response;
});
httpMock.expectOne('localhost:5555/my-path').flush(data);
expect(actualResponse).toEqual(data);
}));
});
}
「バックエンド」の設定がわかりにくいとは考えられません。 DIはAngular2の主要な基本ブロックです。これはまさにDIが作られたユースケースです。 'MockBackend、は(XHRBackend、{useExisting:MockBackend})を提供すると複雑になる。それは簡単で簡単です。 –
@GünterZöchbauerソフトウェアエンジニアは様々です。ちょうど何かが上位50パーセンタイルでは簡単なので、底面50のために簡単にはなりません。実際に自分の靴に着用せずに別の人のPOVを無視することは決してうまくありません。 –
@KaMokコメントは受け付けられません。誰かが解決策を求めている場合、彼は問題の内容に関する情報を提供する必要があります。それが私のコメントです。 「Http用のバックエンドオブジェクトを設定するためのドキュメントは、あまりにも単純で、単純な作業のために複雑すぎるように見えました。ちょうど役に立たない怒鳴りです。もし彼がリンクを提供していたり、複雑すぎると判明したコードを投稿した場合は、議論すべきことがあったが、それは本当に問題ではない。私はちょうどより多くの情報を得ることを試みた。 –