4
的情況是我有一個ChildCtrl
控制器從BaseCtrl
繼承以下this inheritance pattern:
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實例化」,表明我的實例是$controller
使用的實際控制人,而不是提供$provide.value()
。
什麼是最好的測試方法?