Wie zum Hohn eckig $resource Jasmin tests

Ich bin versuchen zu testen, ein controller, der verwendet eckig $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);});
  }

Und hier ist der test-code.

var apiServer = "...";
var app_id = 999
var mock_object_data = {...};


describe('apps permissionsCtrl', function(){
  var scope, ctrl, $httpBackend;

  //Create a matcher for comparing data 
  beforeEach( function() {
    this.addMatchers({
      toEqualData: function(expected) {
        return angular.equals(this.actual, expected);
      }
    });
  });

  //Create the controller with injected data/services
  beforeEach(inject(function(_$httpBackend_, $rootScope, $controller, $resource) {
    $httpBackend = _$httpBackend_;
    //cookie data to inject
    var cookies = new Array();
    cookies['id'] = '...'; //just needs to be declared


    $httpBackend.expectGET(apiServer+'/v1/app_objects?    find=%7B%22app_id%22:'+app_id+'+%7D&access_token=' + cookies['id'])
      .respond( mock_object_data );

    var $injector = angular.injector(['ng', 'ngResource']);
    var $resource = $injector.get('$resource');

    scope = $rootScope.$new();
    ctrl = $controller(PermissionsCtrl, {$scope: scope, $cookies: cookies, $resource: $resource});
  }));

  it('should put object data into $scope', function() {
    $httpBackend.flush();
    expect(scope.objects).toEqualData( mock_object_data );

});
});

Wenn ich diesen starte, bekomme ich

Error: Unknown provider: $resourceProvider <- $resource

in der Zeile, wo ich zu schaffen versuche meinen controller. Ich verstehe nicht, wie man injizieren diese in meinem controller und egal was ich versuche ich bekomme den gleichen Fehler. Ein paar Dinge, die ich versucht habe sind

  • Die Deklarierung eines leeren mock-Objekt und übergeben Sie es durch, ähnlich wie meine cookies variable. Ich vermute, dies ist wahrscheinlich eine schlechte Lösung, da ich eigentlich den Dienst verwenden möchten.
  • Nachahmung der Umfang mock und übergeben es in meinen inject-Funktion und übergeben $Ressourcen.$neues() zu meinem controller.
  • Nichts tun und hoffen, dass httpBackend würde es abdecken, dass da ist, was letztlich aufgerufen wird, sowieso. Vojta Jína gemacht, es Klang wie das funktionieren würde, aber keine Würfel.
  • Milde Epitheta. Befriedigend aber nicht sehr effektiv.

InformationsquelleAutor akronymn | 2013-01-09

Schreibe einen Kommentar