Подтвердить что ты не робот

Метод angilejs ui-router go()

У меня есть контроллер, который получает значение от $scope и отправляет его в другое состояние:

controllers.controller('SearchController', ['$scope', '$state', '$stateParams',
function($scope, $state, $stateParams) {
    $scope.search = function() {
        $stateParams.query = $scope.keyword;
        $state.go('search', $stateParams);
    };
}]);

Я не уверен, как пройти модульное тестирование этого метода поиска. Как я могу либо проверить, что метод go был вызван, либо сделать что-то вроде when($state.go('search', $stateParams)).then(called = true); с помощью Karma/AngularJS?

4b9b3361

Ответ 1

Оба эти звучат как вещи, которые вы можете сделать с шпионами Жасмин.

describe('my unit tests', function() {
    beforeEach(inject(function($state) {
        spyOn($state, 'go');
        // or
        spyOn($state, 'go').andCallFake(function(state, params) {
            // This replaces the 'go' functionality for the duration of your test
        });
    }));

    it('should test something', inject(function($state){
        // Call something that eventually hits $state.go
        expect($state.go).toHaveBeenCalled();
        expect($state.go).toHaveBeenCalledWith(expectedState, expectedParams);
        // ...
    }));
});

Здесь есть хороший шпионский обман http://tobyho.com/2011/12/15/jasmine-spy-cheatsheet/ или фактические документы Jasmine .

Хорошая вещь об использовании шпионов заключается в том, что она позволит вам избежать фактического выполнения перехода состояния, если вы явно не указали это. Переход состояния приведет к отказу вашего unit test в Карме, если он изменит URL.