0

У меня есть директива, которая потребляет услугу:Юнит Угловая директива, которая потребляет услуги

angular.module('app', []) 
.service('myService', function() { 
    return { 
    getCustomer: function(){ 
     return { 
     name: 'Naomi', 
     address: '1600 Amphitheatre' 
     }; 
    } 
    }; 
}) 
.directive('myCustomer', function(myService) { 
    return { 
    link: function(scope){ 
     scope.customer = myService.getCustomer(); 
    }, 

    template: 'Name: {{customer.name}} Address: {{customer.address}}' 
    }; 
}); 

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

var tests; 
(function (tests) { 
    describe('myCustomer Directive', function() { 
     var scope, createDirective; 

     beforeEach(angular.mock.module('app')); 
     beforeEach(angular.mock.module('templates')); 

     beforeEach(angular.mock.inject(function ($injector) { 
      var $compile = $injector.get('$compile'); 

      var myService = $injector.get('myService'); 

      scope = $injector.get('$rootScope'); 

      // where do I inject myService??? 

      createDirective = function() { 
       return $compile('<my-customer></my-customer>')(scope); 
      }; 
     })); 
     describe('on creation', function() { 
      var sut; 

      beforeEach(function() { 
       sut = createDirective(); 
       scope.$digest(); 
      }); 

      it('creates an element node', function() { 
       var contents = sut.contents(); 
       expect(contents[0].nodeType).toBe(sut[0].ELEMENT_NODE); 
      }); 
     }); 
    }); 
})(tests || (tests = {})); 

Проблема заключается в том, что мне нужно, чтобы иметь возможность явно вводить зависимость, так что я могу дразнить некоторые из его звонков. Это возможно?

Here's a Plunker с моим кодом приложения.

+0

Вам не нужно вводить его. Угловая инъекция для вас. –

+0

В этом проблема: это не так. Я получаю неизвестную ошибку поставщика. –

+0

Если у вас есть ошибка, напишите полное сообщение об ошибке/stacktrace в вопросе. –

ответ

0

Так получается, как указал JB Nizet, что все, что вам нужно сделать, это следить за обслуживанием, и все это заботится о себе.

beforeEach(angular.mock.inject(function ($injector) { 
     var $compile = $injector.get('$compile'); 
     scope = $injector.get('$rootScope'); 

     var myService = $injector.get('myService'); 

     // set up spies 
     spyOn(myService, "getCustomer").and.returnValue({foo: 'bar'}); 

     createDirective = function() { 
      return $compile('<my-customer></my-customer>')(scope); 
     }; 
    })); 
Смежные вопросы