次のようにコード化されたジャスミンテストがあります。
it ("should send correct message to server to get data, and correctly set up scope when receiving it", function(){
$httpBackend.when('GET', 'https://localhost:44300/api/projectconfiguration/12').respond(fakedDtoBase);
$routeParams.projectId=fakeId; // user asks for editing project
scope.$apply(function(){
var controller=controllerToTest(); // so controller gets data when it is created
});
expect(scope.projectData).toEqual(fakedDtoBase);
});
動作しますが、エラーが発生します:
Error: Unexpected request: GET views/core/main/main.html
No more request expected
at $httpBackend (C:/SVN/src/ClientApp/client/bower_components/angular-mocks/angular-mocks.js:1207:9)
at sendReq (C:/SVN/src/ClientApp/client/bower_components/angular/angular.js:7800:9)
at $http.serverRequest (C:/SVN/src/ClientApp/client/bower_components/angular/angular.js:7534:16)
(more stack trace)....
私は他のすべての呼び出しをモックできることに気付いています。しかし、他のいくつかのことを呼び出す可能性があるため、テストが他に何をロードしたいかは気にしないとしましょう。他のすべてのリクエストが「黙って」行われ、他のすべてのリクエストに対して単一のダミー応答が提供されるようにする方法を教えてください。
指定していないリクエストが行われたため、テストは失敗します。
追加してみてください:
$httpBackend.when('GET', 'views/core/main/main.html').respond(fakedMainResponse);
もちろん、fakedMainResponse
も定義する必要があります。
documentation (セクションRequest Expectations vs Backend Definitions)もご覧ください:
要求の期待は、アプリケーションによって行われた要求についてアサーションを作成し、それらの要求に対する応答を定義する方法を提供します。 予想されるリクエストが行われない場合、またはリクエストが間違った順序で行われた場合、テストは失敗します。
$httpBackend.when
の2番目のパラメーターは、実際にはRegExp
です。したがって、他のすべての要求に一致するRegExp
を指定すると、機能するはずです。
EndToEndテストでhttp呼び出しをモックするためにhttpBackendを使用している場合、またはアプリケーションのhttp呼び出し全体をモックする場合は、次のコードをアプリ構成セクションに追加します(テンプレートの場所に応じて正規表現を変更します):
$httpBackend.whenGET(/^\/templates\//).passThrough();
リファレンス: https://docs.angularjs.org/api/ngMockE2E/service/ $ httpBackend
Ui-routerの統合中に同様の問題を修正するために、angularjs 1.4でテスト済み
$digest()
がある場合、次のように$digest
に従う必要があることに注意することも重要だと思います。
_$rootScope_.$digest();
$httpBackend.when('GET', 'views/core/main/main.html').respond(fakedMainResponse);
// ...
$httpBackend.flush(); // And remember to flush at the end