2
我目前正在研究一個大的AngularJS應用程序,非常基於優秀的AngularJS Styleguide by John Papa。如何在AngularJS應用程序中模擬/存根激活()方法
他的一個建議是使用activate()
方法作爲每個控制器的一種引導程序。這使您的代碼結構清晰,並且您立即知道引導啓動的位置。很多時候,我用它來加載數據(我更喜歡通過路由解析)。
我面臨的問題是如何在不運行activate()
-方法的情況下在下面的代碼示例中單元測試methodUnderTest()
-方法。
(function() {
'use strict';
angular
.module('myApp', [])
.controller('ControllerUnderTest', ControllerUnderTest);
ControllerUnderTest.$inject = [];
/* @ngInject */
function ControllerUnderTest() {
var vm = this;
// attach functions to vm
vm.activate = activate;
vm.methodUnderTest = methodUnderTest;
// activate
activate();
function activate() {
// controller start-up logic
}
function methodUnderTest() {
// how to test this method, without running the activate() method
}
})();
下面是測試代碼,我現在有,但你希望它會永遠運行activate()
方法(這是不是我想要的)。
(function() {
var scope, createController;
beforeEach(module('myApp'));
describe('ControllerUnderTest', function(){
beforeEach(inject(function($rootScope, $controller) {
scope = $rootScope.$new();
createController = function() {
return $controller('ControllerUnderTest', { 'scope': scope });
};
}));
it('should be defined', function() {
var controller = createController();
expect(controller).toBeDefined();
});
it('should have a methodUnderTest', function() {
var controller = createController();
expect(controller.methodUnderTest).toBeDefined();
});
});
})();
如何測試ControllerUnderTest.methodUnderTest()
而不運行activate()
方法?
你不得不嘲笑激活方法內的所有來電,不執行初始化方法不是一個很好的測試 – fantarama
感謝fantarama,但如果有發生了很多的東西'activate()'方法有很多不同的依賴關係(服務),這對於methodUnderTest來說沒有用? –
無用的測試服務必須用無效實現或固定返回值嘲笑 – fantarama