【发布时间】:2013-09-30 22:23:04
【问题描述】:
如您所知,在单元测试中,它的内置 angularjs 功能可以使用 $httpBackend 模拟 XHR 请求 - 这在编写单元测试时非常有用。
最近遇到文件上传需要mock 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);
但在这种情况下,我不知道如何实现“进度”回调和“中止”回调(如果我现在正在工作,它们是必不可少的并且是必需的)。
我看到最新的 Angular 支持 Promise 的进度回调(不确定是否与 $http 服务集成),但是中止回调呢?
有什么想法或者你以前遇到过类似的事情吗?
【问题讨论】:
标签: unit-testing testing angularjs mocking