Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 如何在jasmine测试中模拟资源_Unit Testing_Angularjs_Jasmine - Fatal编程技术网

Unit testing 如何在jasmine测试中模拟资源

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

我正在尝试测试一个使用angular的$resource的控制器

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