https://docs.angularjs.org/api/ngResource/service/ $资源 从$ resource的API我们知道可以调用$ resource方法中的自定义操作。我的问题是,如何模拟具有此自定义操作的服务?
例如,BaseService代码如下:
angular.module('shared').factory('BaseService', function($resource) {
var resourceConfig = {
serverBaseUrl: AJAXConfig.ajaxUrl+"&resource_id="
};
var createResource = function(url, paramDefaults, actions) {
return $resource(resourceConfig.serverBaseUrl + url,
paramDefaults, actions);
};
return {
createResource: createResource
};
});
依赖于BaseService的另一个TopService就像:
angular.module('SomeModule').factory('TopService',
function($resource, BaseService) {
var listResource = BaseService.createResource('onSomeList',
null, {
getList: {
method: 'GET',
isArray: true
}
});
var getSomeList = function() {
return listResource.getList().$promise;
};
return { getSomeList : getSomeList };
}
现在我需要编写TopService的单元测试代码,所以我使用$ provide:
模拟BaseServicemodule(function($provide) {
$provide.service('BaseService', function($q) {
....
}
}
我可以使用模拟createResource方法 jasmine.createSpy(' createResource')。and.callFake(...) 但是如何模拟自定义动作getList()?
更新:我意识到listResource可以简化为:
var listResource = BaseService.createResource('onSomeList',
null, {
get: {
method: 'GET',
isArray: true
}
});
因此,自定义操作有一个标准名称" get",但我仍然不知道如何在测试代码中模拟它。
答案 0 :(得分:0)
我会这样做
#include <iostream>
#include <algorithm>
using namespace std;
bool HasValue(int number, long length, int arr[], bool finalResult);
int main(int argc, const char* argv[])
{
int num, arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
bool result;
auto array_length = end(arr) - begin(arr); //size of array
cout << "enter number: ";
cin >> num;
HasValue(num, array_length, arr, result);
cout << result << "\n";
return 0;
}
bool HasValue(int number, long length, int arr[], bool finalResult)
{
int* end = arr + length;
int* result = find(arr, end, number);
if (result != end)
finalResult = true;
else
finalResult = false;
return finalResult;
}
答案 1 :(得分:0)
您不需要模拟资源。你需要模拟服务。不要在测试顶部创建shared
,而是创建YourMocks
。
YourMocks可能如下所示:
angular.module('YourMocks, []) .factory('TopService', function($q) { return {getSomeList: function(){$q.when('your test data goes here')}; });