2015-02-04 3 views
3

Я пытаюсь написать несколько тестов для контроллера, но ВСЕ документация/учебники/и т. Д. Демонстрируют функции и переменные в области $ scope. Что делать, если вы хотите проверить что-то не на $ scope?Угловое модульное тестирование: как проверить свойства контроллера без области действия

Ex:

app.controller('fakeCtrl', function($scope) { 

    var foo = 'bar'; 

    function fooBar() { 
     console.log('foo bar'); 
    } 

}); 

Есть ли способ для модульного тестирования foo или fooBar()?

Вот что НЕ работает:

describe("fake controller", function(){ 

    beforeEach(module('app')); 

    var $controller; 

    beforeEach(inject(function(_$controller_, $rootScope){ 
     $controller = _$controller_; 
     $scope = $rootScope.$new(); 
    })); 

    describe('foo property', function() { 
     it('is bar', function() { 
      var controller = $controller('fakeCtrl', { $scope: $scope }); 
      expect(controller.foo).toEqual('bar'); 
     }); 
    }); 
    ... 

ответ

2

Вы не можете. Переменная foo и функция fooBar недоступны за пределами вашего контроллера-контроллера. Однако вы можете сделать что-то подобное:

app.controller('fakeCtrl', function($scope) { 
    this.foo = 'bar'; 
    this.fooBar() { 
    console.log('foo bar'); 
    } 
}); 

И чем:

(...) 
describe('foo property', function() { 
    it('is bar', function() { 
     var controller = $controller('fakeCtrl', { $scope: $scope }); 
     expect(controller.foo).toEqual('bar'); 
    }); 
}); 

В тесте вы описали foo как свойство, но в контроллере foo просто переменная не собственность.

Редактировать: Проверить https://docs.angularjs.org/api/ng/directive/ngController и controller as синтаксис.

1

В javascript нет способа получить доступ к локальной функции (объявленной внутри функции) или переменной из внешней области. У вас есть возможность проверить это:

  1. Объявить функцию/переменную по области.
  2. Перемещение функции/переменная угловую службу и проверить, что служба
  3. Test Функции/переменные косвенно, путем тестирования методов в рамках, которые используют эту функцию/значение

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

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