ご存じのように、ユニット テスト内では、$httpBackend を使用して XHR リクエストをモックする組み込みの angularjs 機能があります。これは、ユニット テストを作成するときに便利です。
最近、ファイルのアップロード時に XHR をモックする必要があり、いくつかの問題を発見しました。
次のコードを検討してください。
var xhr = new XMLHttpRequest();
xhr.upload.addEventListener("progress", uploadProgress(event), false);
xhr.addEventListener("load", uploadComplete(event), false);
xhr.addEventListener("error", uploadError(event), false);
xhr.addEventListener("abort", uploadAbort(event), false);
xhr.open("POST", 'some url');
xhr.send(someData);
私がやりたいのは、XHR リクエストのモックを使用してそのようなコードの単体テストを行うことですが、ここでは $http サービスが使用されていないため、実行できません。
私はこれを試しました(そしてそれは機能しており、$httpBackendで嘲笑することができます):
$http({
method: 'POST',
url: 'some url',
data: someData,
headers: {'Content-Type': undefined},
transformRequest: angular.identity})
.then(successCallback, errorCallback);
しかし、この場合、'progress' コールバックと 'abort' コールバックを実装する方法がわかりません (これらは不可欠であり、現在取り組んでいる場合に必要です)。
最新の Angular が promise の進行状況コールバックをサポートしているという情報を見てきました (ただし、$http サービスと統合されているかどうかはわかりません) が、abort コールバックはどうですか?
アイデアはありますか、それとも以前に似たようなものに会ったことがありますか?