我正在使用https://github.com/danialfarid/angular-file-upload进行文件上传。当xhr请求收到progress
事件时,它提供一个progress
方法。这是来自angular-file-upload的源代码:
xhr.upload.addEventListener('progress', function(e) {
deferred.notify(e);
}, false);
我现在的问题是,我应该如何使用$httpBackend
进行测试?我可以用
$httpBackend.expectPOST("http://localhost:9001/").respond('ok');
$httpBackend.expectPOST("http://localhost:9001/").respond(500, 'some error');
但是我无法获得承诺的notify
。有没有办法做到这一点?
修改
我要测试的部分位于progress
方法中:
$upload.http({url: url, method: 'POST', data: file})
.progress(function(evt) {
// here is more code, that needs to be tested
self.$deferreds.upload.notify((100.0 * evt.loaded / evt.total).toFixed(2));
}).success(function(data, status, headers, config) {
self.$deferreds.upload.resolve(data);
}).error(function(response) {
self.$deferreds.upload.reject(response);
});
答案 0 :(得分:1)
你想窥探$upload.http
方法并返回一个模拟对象,让你注册进度,成功和错误回调。
spyOn($upload, 'http').andReturn({
progress: function (progressCallback) {
this.progressCallback = progressCallback;
},
success: function (errorCallback) {
this.errorCallback = errorCallback;
},
error: function (errorCallback) {
this.errorCallback = errorCallback;
}
});
然后你可以在测试中同步调用这些回调:
it('should do something', function () {
$upload.progressCallback();
// or $upload.successCallback();
// or $upload.errorCallback();
expect('this').toBe('that');
});
答案 1 :(得分:0)
我们在谈论单元测试?
为什么你需要测试第三方?
只需模拟这一部分。
可能我没有理解这个问题,所以需要更多应该由测试覆盖的代码。