Мы только начинаем модульное тестирование в нашем приложении Angular и используем фреймворк karma/mocha/chai для модульного тестирования. Я провел несколько основных модульных тестов для различных сервисов и фабрик, которые мы определили, и модульное тестирование работает отлично. Однако теперь мы хотим протестировать некоторый контроллер и оценить переменные области видимости, которые изменяют контроллеры.
Вот пример одного из таких контроллеров:
angular.module('App').controller('myCtrl', ['$scope', 'APIProxy',
function ($scope, APIProxy) {
$scope.caseCounts = {caseCount1: 0, caseCount2: 0};
$scope.applyCounts = function () {
$scope.caseCounts.caseCount1 = {...some case count logic...}
$scope.caseCounts.caseCount2 = {...some case count logic...}
};
APIProxy.getAll().then(function (data) {
{...do a bunch of stuff...}
$scope.data = data;
$scope.applyCounts();
});
}]
);
Теперь, когда я выполняю модульное тестирование, я хотел бы начать с простого «имеет ли значение $scope.caseCounts> 0, а затем я буду строить оттуда. Однако не очевидно, как заставить контроллер запускать службу APIProxy и как обрабатывать возможный возврат данных. Мы пробовали $scope.getStatus() и $scope.apply() и некоторые другие вещи, но я чувствую, что мы далеко не в теме, и мы принципиально упускаем кое-что о том, как это сделать.
В настоящее время наш тестер контроллера выглядит так:
describe("myCtrl unit tests",function(){
beforeEach(module('App'));
var ctrl, APIProxy;
beforeEach(inject(function ($rootScope, $controller, _APIProxy_)
{
$scope = $rootScope.$new();
APIProxy = _APIProxy_;
ctrl = $controller('myCtrl', {$scope: $scope, APIProxy: APIProxy});
}));
it('Loads data correctly', function() {
expect(ctrl).to.not.be.undefined;
//??? what else do we do here to fire the getAll function in controller?
});
});