2

У меня есть Угловой сервис, который получает номер N (между 1-12) и возвращает сумму чисел до 12 - N:Простой тестовый модуля для угловой службы

app.value('myNumberService', { 
    calculateValue: function (n) { 
     var empty = []; 
     for(var i = 0; i < 12 - n; i++){ 
      empty.push(i); 
     } 
     return empty; 
    } 
}); 

Я пытаюсь написать очень простой модульное тестирование, чтобы проверить, что служба определяется:

describe('app', function() { 

    var app, service; 

    beforeEach(function() { 
     app = angular.mock.module('app') 
    }); 

    beforeEach(inject(function($injector) { 
     service = $injector.get('myNumberService'); 
    }));    

    describe('*Validating myNumberService service', function() {   
     describe("calculateValue", function(){ 
      it("should be defined.", function(){ 
       expect(service.calculateValue()).toBeDefined(); 
      }); 
     }); 
    });  
}); 

Я получаю эту ошибку:

PhantomJS 1.9.8 (Windows 7) app *Validating myNumberService service encountered a declaration exception FAILED 
    TypeError: 'undefined' is not an object (evaluating 'service.calculateValue') 

Любая помощь оценили.

ответ

8

Я не уверен, почему ваш тест не с первого взгляда. Однако у него есть много вещей, которые можно улучшить (а где-то посередине, вероятно, ошибка). Вот как я бы написать модульный тест для этого модуля:

describe('app', function() { 

    var myNumberService; 

    beforeEach(module(this.description)); // this.description === 'app' 

    beforeEach(inject(function (_myNumberService_) { 
     myNumberService = _myNumberService_; // see documentation for `angular.mock.inject` 
    })); 

    describe('myNumberService', function() { 

     it('calculates ...', function() { 
      expect(myNumberService.calculateValue(...)).toBe(...); 
     }); 
    }); 
}); 

Как вы можете видеть, я на самом деле не наличие тестового сервиса там. Это связано с тем, что если служба не существует, тесты, требующие ее впрыска, потерпят неудачу с вполне понятной ошибкой. В ваших модульных тестах необходимо явно проверить функциональность вашего устройства; базовая целостность вашего кода будет протестирована неявно. Чтобы привести другой пример, вы не будете проверять, что функция calculateValue является функцией. (Первый тест, который пытается использовать его в качестве функции потерпит неудачу с «... не является функцией» в любом случае, если это не так.)


Bonus подсказка: Сумма 1 + 2 + 3 + ... + n можно рассчитать simply как (n * (n + 1))/2.

+0

работает отлично, спасибо. Позор мне пришлось отказаться от 50 очков за такую ​​простую проблему. –

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

  • Нет связанных вопросов^_^