2015-06-25 2 views
1

Я не могу понять, почему я продолжаю получать это исключение. Услуга находится в одном модуле, а помощник (тестируемый блок) находится в другом. Я пытаюсь издеваться над сервисом (который является зависимостью для помощника) и создавать помощника, вводящего это издеваемое обслуживание.'undefined' не является функцией - Jasmine unit test для AngularJS

Спасибо за любые идеи!

TypeError: 'undefined' is not a function (evaluating 'jasmine.spyOn(myService, 'someData')')

Вот тест:

describe('myHelper test', function() { 
var myHelper, myService; 
var expectedData = 'test'; 

beforeEach(module('serviceModule')); 
beforeEach(module('helperModule')); 

    it('works', function() { 

     module(function($provide) { 
      $provide.service('myService', function() { 
       someData = jasmine.spyOn(myService, 'someData').and.callFake(function(){ 
        return 100; }); 
      }); 
     }); 

     var mockMyService; 

     inject(function(myService){ 
      mockMyService = myService; 
     }); 

     angular.module('helperModule').config(['myHelperProvider', function (myHelperProvider) { 
      return myHelper(mockMyService, _); 
     }]); 

     expect(myHelper.someData()).toEqual(expectedData); 
    }); 

});

+0

У вас возникли проблемы с выполнением кода тестирования вашего модуля вне контекста - можете ли вы также отправить код службы/вспомогательного модуля? В общем, мое предложение состояло бы в том, чтобы сделать формальный макет службы, а не делать это в самом модульном тесте, поскольку это делает макет портативной. – user1821052

ответ

1

Если вы используете spyOn, тогда вы должны ввести реальный сервис внутри теста, а затем сделать spyOn.

inject(function(myService){ 
      jasmine.spyOn(myService, 'someData').and.callFake(function(){ 
        return 100; }); 
      }); 
      mockMyService = myService; 
     }); 

В настоящее время вы пытаетесь создать макет службы myService путем введения оригинального сервиса myService (который также имеет ошибку, потому что вы не сделали инъекцию оригинального сервиса)!