2017-09-22 3 views
0

Ich habe ein Stück Winkel Code, der eine Post-Anfrage an den Cloudant, gibt eine Antwort, baut eine URL mit ihm und macht eine Anfrage mit dem gleichen. Die get-Anforderung gibt einen Array-Puffer zurück, durch den ich eine PDF-Datei erzeuge, die im Frontend gerendert werden soll.Unit Test Angular Js mit Jasmine

Könnte jemand bitte lassen Sie mich beraten, wie Unit-Test dies als Unit-Tests zusammen mit Rest API ist ein neues Gebiet für mich. PFB meinen Code

$scope.viewfile = function(name) { 
       $http({ 
       method : 'POST', 
       url : '/search/searchFiles',  
       data : {'currentdropdownvalue' : name} , 
      }). 
      success(function(data){ 
       if (!angular.isUndefined(data.docs[0])){ 
       $scope.file = data.docs[0]._id; 
       var fileUrl = $scope.cloudantUrl + $scope.file +"/"+ $scope.file;  
       $http.get(fileUrl {responseType:'arraybuffer'}) 
       .success(function (response) { 
        var file = new Blob([response], {type: 'application/pdf'}); 
        var fileURL = URL.createObjectURL(file); 
        $scope.content = $sce.trustAsResourceUrl(fileURL); 
        $scope.contentType = "application/pdf"; 
        $scope.contentWords = null; 
       }).error(function(data){ 
        console.log("Printing Error inside Post of view " , data); 
       }); 
       } 
        else{ 
         $scope.content = null; 
         $scope.contentWords = "File is not available for the selected Name"; 
        } 



      }). 
      error(function(data){ 
       console.log("Printing Error inside view " , data); 
      }); 
     }; 
    } 
+0

Sie $ httpBackend können Sie die Http verspotten ruft – MatTaNg

+0

könnten Sie bitte ein Mock-up oder eine Probe abgeben, so dass ich diese Idee kann es verwenden – user6591323

+0

und aufbauen würde ich um nur auf ihre Dokumente verweisen: https://docs.angularjs.org/api/ngMock/service/$httpBackend Ich bin weit von einem Experten auf $ httpBackend. Normalerweise spioniere ich einfach das $ http-Objekt aus und lasse es zurückkommen, was mir im Prinzip das Gleiche bedeutet. Sie sollten $ httpBackend verwenden. – MatTaNg

Antwort

0

Idealerweise verwenden Sie sollten wahrscheinlich $ httpBackend aber ich in der Regel nur einen Spion auf diese Funktionen bis Ende setzen. Heres einige sudo Code spyOn:

it('Should test viewFile', function() { 
     spyOn($http, 'POST').andReturn(mock_data); 
     spyOn($http, 'GET').andCallFake(function(fileUrl) { 
      expect(fileUrl).toBe($scope.cloudantUrl + $scope.file +"/"+ $scope.file); 
     }); 
     $scope.viewFile(mocked_name).then(function() { 
      expect($scope.content).toBe($sce.trustAsResourceUrl(fileURL)); 
      expect($scope.contentType).toBe("application/pdf"); 
      expect($scope.contentWords.toBe(null); 
     }); 

     $rootScope.$apply(); 
    });