2014-02-19 89 views
3

我正在使用Jasmine來測試我的服務。我的一個服務使用$ routeParams作爲URL參數。現在,當我測試,$ routeParams變得不確定

這是我的服務代碼

this.getProjectFunction = function (options) { 
       $http.get(rootUrl + $routeParams.projectName) 
         .success(options.success) 
         .error(options.error); 
      }; 

這是我的測試看起來像

describe('App Service', function() { 

    describe('App Service Tests', function(){ 

     var httpBackend, service, optionsSpy, routeParams; 

     var returnData = [{"id":1,"name":"test"]; 

     beforeEach(module('appName')); 

     beforeEach(
      inject(
       function($httpBackend,projectService,routeParams) { 
        service = projectService; 
        optionsSpy = jasmine.createSpyObj('optionsSpy',['success','error','data']); 
        routeParams = $routeParams; 
        httpBackend = $httpBackend; 

       } 
      ) 
     ); 

     afterEach(function() { 
      httpBackend.verifyNoOutstandingExpectation(); 
      httpBackend.verifyNoOutstandingRequest(); 
     }); 


      //this should get a specific project 
      it('should call the getAllProjectsFunction function that will return an argument array', 

          function(){ 

           //set up some data for the http call to return and test later. 
           httpBackend.whenGET('../'+routeParams.projectName).respond(returnData); 
           service.getProjectFunction(optionsSpy); 

           httpBackend.flush();        
           expect(optionsSpy.success.mostRecentCall.args[0]).toBe(returnData); 
          } 
      ); 
    }); 
}); 

進出口新的茉莉花測試。感謝您的幫助有一個很好的一天:)

+1

inject(函數($ httpBackend,projectService,__ routeParams__)...) 您正在注入錯誤的服務 – Gabe

回答

3

你需要注入$routeParamsrouteParams,然後你可以設置routeParams.projectName = 'foo';然後設置httpBackend.whenGET('../foo').respond(returnData);../foo可能需要更像/foo,因爲我不認爲「起來一個文件夾「命令在這裏工作。)