Тестирование услуги AngularJS, которая использует параметр $routeParams в качестве параметра URL

Я использую Jasmine для тестирования своих сервисов. Одна из моих служб использует параметр $routeParams в качестве параметра URL. Теперь, когда я тестирую, $routeParams становится undefined

это мой служебный код

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

Im новое испытание Жасмин. Спасибо за помощь, у вас хороший день:)

1 ответ

Вам нужно ввести $routeParams not routeParams, а затем вы можете установить routeParams.projectName = 'foo';, а затем установить httpBackend.whenGET('../foo').respond(returnData); (../foo может быть больше похож на /foo, так как я не думаю, что "одна папка" работает здесь.)

licensed under cc by-sa 3.0 with attribution.