Как проверить с Jasmine контроллер AngularJS, который вызывает метод обслуживания, который возвращает обещание
Я использую v1.2.0-rc.3 AngularJS с тестовой средой Jasmine.
Я пытаюсь утверждать, что контроллер вызывает сервисный метод. Сервисный метод возвращает обещание. Контроллер выглядит так:
angular.module('test', [])
.controller('ctrl', ['$scope', 'svc', function ($scope, svc) {
$scope.data = [];
svc.query()
.then(function (data) {
$scope.data = data;
});
}]);
Я хочу проверить, что данные назначаются в области, когда метод обслуживанияОтсрочка разрешена. Я создал макет для сервиса и модульный тест выглядит так:
describe('ctrl', function () {
var ctrl, scope, svc, def, data = [{name: 'test'}];
beforeEach(module('test'));
beforeEach(inject(function($controller, $rootScope, $q) {
svc = {
query: function () {
def = $q.defer();
return def.promise;
}
};
scope = $rootScope.$new();
controller = $controller('ctrl', {
$scope: scope,
svc: svc
});
}));
it('should assign data to scope', function () {
spyOn(svc, 'query').andCallThrough();
deferred.resolve(data);
scope.$digest();
expect(svc.query).toHaveBeenCalled();
expect(scope.data).toBe(data);
});
});
Я ожидаю, что метод запроса svc будет вызван, но, видимо, он нет.
Я последовал заэтот Руководство по издевательским обещаниям в юнит-тестах.
Что я делаю неправильно?