2015-04-06 5 views
0

Первый раз, когда я пишу вопрос о Stack;) У меня есть проблема с тестированием $ mdSidenav (компонент углового материала см. https://material.angularjs.org/). В моем контроллере у меня есть что-то вроде:

$scope.toggleRight = function() { 
    $mdSidenav('right').toggle(); 
}; 

Я хочу, чтобы проверить его. Таким образом, в моем тестовом файле я создал, в первую очередь, макет этого объекта:

var $mdSidenav = function(test){ 
     return { 
      toggle: function(){ 
       return true; 
      } 
     }; 
    }; 

    beforeEach(inject(function ($controller) { 
     $scope = $rootScope.$new(); 
     createController = function() { 
      return $controller('headerCtrl', { 
       '$scope': $scope, 
       '$mdSidenav': $mdSidenav 
      }); 
     }; 
    })); 

Тогда я пытаюсь проверить:

describe('toggleRight method', function(){ 
     beforeEach(function(){ 
      spyOn($mdSidenav('right'), 'toggle').and.callThrough(); 
     }); 

     it('Should toggleRight open/close', function(){ 
      $scope.toggleRight(); 
      expect($mdSidenav('right').toggle).toHaveBeenCalled(); 
     }); 

    }); 

Но карма отправить мне эту ошибку:

Error: Expected a spy, but got Function.

Я надеюсь, что кто-то может мне помочь;)

ответ

1

Вы можете попробовать другой подход, использовать $ предоставлять и анонимный Modul е, чтобы ввести макет.

Я использую Sinon здесь, но вы можете изменить соответствующий код Жасмин:

var spy = sinon.spy(); 

beforeEach(module(function ($provide) { 
    $provide.value('$mdSidenav', function (v) { 
    return { 
     toggle: spy 
    } 
    }); 
})); 

Тогда в тесте:

sinon.assert.calledOnce(spy); 
+0

Ty за ответ! Но что такое «синус»? Я не понимаю ...;) –

+0

Sinonjs.org - это просто отличный способ шпиона, заглушки или макета в Javascript. Вы можете использовать Jasmine вместо этого, вместо того, чтобы заменить использование sinon кодом Jasmine. –

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