[英]How to test $resource calls if it contains specific headers on making http request?
我有以下工廠。
services.factory('Api', ['$resource', function ($resource) {
return $resource(urlPath, {
'action': 'get',
'entity': 'Entity'
}, {
MakePost: {
method: "POST",
isArray: false,
headers: {'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8'},
transformRequest: function(obj) {
var str = [];
for (var p in obj) {
str.push(encodeURIComponent(p) + '=' + encodeURIComponent(obj[p]));
}
return str.join("&");
}
}
}
);
}]);
現在,當調用Api.MakePost({},{data: {}}, function () {})
時,我想測試正確的頭數據,即在這種情況下為'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8'
'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8'
設置正確。 是否可以使用$ httpBackend,Jasmine和間諜在angularjs中測試此方案?
可以通過兩種不同的方式進行測試,包括單元測試和功能測試。
與$http
相比, $resource
包含更多的活動部件,因此對它進行存根是有意義的-至少對於某些測試而言。
beforeEach(module('app'))
...
describe('$resource is stubbed in this block', () => {
var resourceObjStub;
var resourceFactoryStub;
beforeEach(() => {
resourceObjStub = jasmine.createSpyObj(['MakePost']);
resourceFactoryStub = jasmine.createSpy().and.returnValue(resourceObjStub);
module({ $resource: resourceFactoryStub });
});
it('...', inject((Api) => {
expect(resourceFactoryStub).toHaveBeenCalledWith(
...
{...},
{ MakePost: {
headers: {...},
transformRequest: jasmine.any(Function),
...
} }
);
expect(Api).toBe(resourceObjStub);
});
});
然后,可以對提供的$resource
參數進行更徹底的測試,例如,可以使用resourceFactoryStub.calls.first()[2].transformRequest
來訪問transformRequest
方法並直接進行測試。
或者可以使用$httpBackend
和真實的$resource
在另一個測試中測試整個事情。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.