2015-01-26 6 views
0

Я пытаюсь высмеять сервис для контроллера, но изо всех сил стараюсь заставить его работать.AngularJS: Mock Controller Service

Использование кода полу-psudeo У меня есть сервис:

.factory('SomeService', ['$http'function($http) { 

    var someService = {}; 

    someService.getData=function(val1, val2){ 
     ... 
     return someData; 
    } 

    return someService; 
} 

и контроллер, как так:

.controller('someController', ['SomeService', function(SomeService){ 
    var self = this; 
    var data = []; 

    self.getSomeData = = function(){ 
     var response = SomeService.getSomething.then(function(response){ 
       self.data = response; 
     }); 
    }; 
}]); 

Я пытаюсь написать тест, который использует $ предоставить издеваться услуги , Что-то вроде этого:

var mockService 

beforeEach(module(function($provide){ 
    mockService.getSomething = function(){ 

      return [ ....]; 
    }; 

    $provide.value('SomeService', mockService); 

})); 

После введения этого издеваться и запустить тест я получаю:

TypeError: не могу установить свойство getSomething неопределенной

Есть ли что-то явно не так с этим кодом (или справа) ?

ответ

0

Вам нужно сделать mockService объект:

describe('Some Service', function(){ 
    var mockService; 

    beforeEach(module(function($provide){ 
     mockService = { 
      getSomething: function() { 
       return { 
        then: function (success, error) { 
         success(true); 
        } 
       }; 
      } 
     }; 
     $provide.value('SomeService', mockService); 
    })); 
}); 

Я бы рекомендовал смотреть через the docs, так как они могут быть очень полезны.

+0

В функции beforeEach? –

+0

да. Я обновил свой ответ, чтобы дать немного больше ясности. –

+0

Спасибо за ответ, но это не работает. Если я использую ваш точный код выше, я получаю: невозможно прочитать свойство «then» неопределенного. –

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