Сценарий: у меня есть ChildCtrl
контроллер, который наследуется от BaseCtrl
после этот шаблон наследования:
angular.module('my-module', [])
.controller('BaseCtrl', function ($scope, frobnicate) {
console.log('BaseCtrl instantiated');
$scope.foo = frobnicate();
// do a bunch of stuff
})
.controller('ChildCtrl', function ($controller, $scope) {
$controller('BaseCtrl', {
$scope: $scope,
frobnicate: function () {
return 123;
}
});
});
Предполагая, что BaseCtrl
выполняет кучу вещей и уже хорошо протестирован, я хочу проверить, что ChildCtrl
создает экземпляр BaseCtrl
с определенными аргументами. Моя первоначальная мысль была примерно такой:
describe("ChildCtrl", function () {
var BaseCtrl;
beforeEach(module('my-module'));
beforeEach(module(function($provide) {
BaseCtrl = jasmine.createSpy();
$provide.value('BaseCtrl', BaseCtrl);
}));
it("inherits from BaseCtrl", inject(function ($controller, $rootScope) {
$controller('ChildCtrl', { $scope: $rootScope.$new() });
expect(BaseCtrl).toHaveBeenCalled();
}));
});
Однако, когда я запускаю тест, шпион никогда не вызывается, и консоль показывает «BaseCtrl instantiated», указывая, что $controller
использует фактический контроллер вместо экземпляра, который я предоставляю с $provide.value()
.
Как лучше всего это проверить?