2014-11-17 86 views
1

我使用https://github.com/danialfarid/angular-file-upload爲我的文件上傳。它提供了一個稱爲progress的方法,當xhr請求收到progress事件時。這是從角文件上傳的源代碼:使用$httpBackend

xhr.upload.addEventListener('progress', function(e) { 
    deferred.notify(e); 
}, false); 

我的問題是現在,我應該怎麼測試呢?我可以測試的成功和錯誤的方法與

$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); 
    }); 

回答

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'); 
}); 
0

我們正在談論的單元測試?

爲什麼你需要測試第三方呢?

只是模擬這部分

也許我沒有得到這個問題的想法,所以需要更多的測試應該覆蓋的代碼。

+0

我已經從我的應用程序添加更多的代碼。我想測試當進度事件被觸發時執行的代碼。 – 23tux