2013-12-18 4 views
4

У меня есть угловое приложение, которое мне нужно написать для модульных тестов (я знаю, что это нормально).бегущие жасминовые угловые тесты без кармы

Всякий раз, когда я бегу мой жасмин задачу я получаю следующую ошибку:

ReferenceError: Can't find variable: ApplicationService 

Мы просто хотим, чтобы запустить тесты в phantomJS без кармы это возможно, и если да, то вы можете посмотреть на мой код и сказать мне, что идущий haywire.

Я добавил жасмин задачу к моему gruntfile который выглядит следующим образом:

jasmine:{ 
     src: ['src/main/js/**/*.js'], 
     options:{ 
      specs: 'src/test/js/**/*.js', 
      vendor: [ 'src/test/lib/**/*.js', 'src/main/lib/js/*.js'] 
     } 
}, 

Служба Пытаюсь теста находится в файле «SRC/основные/JS/услуги/ApplicationService .js' и выглядит следующим образом:

(function(){ 

'use strict'; 

var services = angular.module('portal.services'); 

services.factory('ApplicationService', ['ApplicationData', 'localStorageService' ,'UserService', function(ApplicationData, localStorageService, UserService){ 
    return new ApplicationService(ApplicationData, localStorageService, UserService); 
}]); 

function ApplicationService(ApplicationData, localStorageService, UserService){ 
    this.applicationData = ApplicationData; 
    this.localStorageService = localStorageService; 
    this.userService = UserService; 
} 

ApplicationService.prototype.getApplications = function(entity){ 
    var locale = this.userService.getUserinfoLocale(); 
    var applications = this.localStorageService.get(Constants.key_applications+locale+'_'+entity); 
    if(applications !== null && applications !== undefined){ 
     return JSON.parse(applications); 
    } else { 
     return this.applicationData.getApplications().query({locale: locale, entity: entity}, $.proxy(function(data){ 
      this.save(Constants.key_applications+locale+'_'+entity, JSON.stringify(data)); 
     }, this)); 
    } 
}; 

}()); 

и мой тестовый файл находится в 'SRC/тест/JS/услуги/ApplicationServiceTest.js' и выглядит следующим образом:

(function() { 

'use strict'; 

describe('ApplicationService.js unit test suite', function() { 

    var applicationData, localStorageService, userService = null; 
    var applicationService = new ApplicationService(applicationData, localStorageService, userService); 

    beforeEach(function() { 
     applicationData = { 
      getApplications:function() { 
       return {application1:'yess', application2:'okay'}; 
      } 
     }; 
     localStorageService = { 
      get:function (key) { 
       if (key === Constants.key_applications + 'nl_ESS') 
        return JSON.stringify({application1:'name1'}); 
       else if (key === Constants.key_applications + 'nl_SVF') 
        return JSON.stringify({application1:'name2'}); 
       else if (key === Constants.key_applications + 'nl_MED') 
        return JSON.stringify({application1:'name3'}); 
      }, 
      add:function (key, value) { 

      } 
     }; 
     userService = { 
      getUserinfoLocale:function() { 
       return 'nl'; 
      } 
     }; 
    }); 


    it('ApplicationService.getApplications should delegate to ApplicationData.getApplications', function() { 
     var applicationService = 
     spyOn(localStorageService, get(Constants.key_applications + 'nl_ESS')).andReturn(null); 
     spyOn(applicationData, 'getApplications'); 
     expect(applicationService.getApplications()).toBe({application1:'name1', application2:'name2'}); 
     expect(applicationData.getApplications).toHaveBeenCalled(); 
    }); 

    it('ApplicationService.getApplications should use the localsStorageService cache', function() { 

    }); 

}); 
}()); 

ответ

2

Я знаю, что это действительно старый вопрос, но на всякий случай он по-прежнему действителен или у других возникает один и тот же вопрос: вы не открываете какой-либо из ApplicationService в ApplicationService.js для внешнего мира, потому что вы помещаете (функцию() {...})(), поэтому нет возможности создать экземпляр в своих тестах.

Если вы хотите протестировать это, вы должны использовать угловые-издевки и особенно функции module() и inject(), которые он предоставляет. Это позволит вам ввести службу в свои тесты.

Если вы хотите протестировать это «POJO», вам следует каким-то образом предоставить ApplicationService. Удаление обертки функций будет самым простым способом, но это сломает прекрасную изоляцию, которую вы сделали, чтобы разоблачить ее как службу. Поэтому мой совет будет заключаться в использовании угловых макетов.

Смежные вопросы