Unit testing 如何在jasmine测试中模拟资源
我正在尝试测试一个使用angular的$resource的控制器Unit testing 如何在jasmine测试中模拟资源,unit-testing,angularjs,jasmine,Unit Testing,Angularjs,Jasmine,我正在尝试测试一个使用angular的$resource的控制器 function PermissionsCtrl($scope, $resource, $cookies) { var Object = $resource('/v1/objects/:id'); loadObjects(); function loadObjects() { $scope.myAppObjects = new Array(); var data = AppObject.get({f
function PermissionsCtrl($scope, $resource, $cookies) {
var Object = $resource('/v1/objects/:id');
loadObjects();
function loadObjects() {
$scope.myAppObjects = new Array();
var data = AppObject.get({find: '{"app_id": '+wtm.app_id+'}'},
function(){
if (data.results) {
for(var i = 0; i< data.results.length; i++) {
if(!data.results[i].is_deleted) {
(function(i){
$scope.objects(data.results[i]);
}(i));
}
}
}
},
function(error){console.log(error);});
}
}));
});
当我运行这个时,我得到
Error: Unknown provider: $resourceProvider <- $resource
错误:未知提供程序:$resourceProvider尝试用以下代码实例化$resource
:
var $injector = angular.injector(['ng', 'ngResource']);
var $resource = $injector.get('$resource');
与其他服务类似,除非它们仍在其他模块中。然后将该模块添加到阵列中
经过更多的阅读和实验,似乎正确的方法是将$resource的使用从控制器中抽象出来。在我的例子中,我编写了一个依赖于$resource的服务,然后将该服务注入到我的控制器中。同时,我将与控制器分开测试该服务。更好的全方位练习
我的服务声明:
angular.module('apiModule', ['localResource', 'ngCookies'])
.factory('apiService', function($resource, $cookies) {
在我的单元测试中,我通过了beforeach设置函数
beforeEach(module('apiModule'));
也许我不明白这里有什么。我试了一下,得到了同样的结果。我更新了我原来的帖子,加入了你的建议。这个解决方案的问题是$resource实际上不是一个服务。这是一个工厂。你能分享一个更完整的代码示例吗?作为Angular和Jasmine的新手,我很难理解这一点。@akronym所以你加入了app.js
来测试控制器?但是你在测试你的服务时不会遇到同样的问题吗?你能帮我解决这个问题吗,它几乎是一样的@akronymn您能写完整的代码示例吗,如何模拟$resource服务?
beforeEach(module('apiModule'));