[英]Angular controller not initialized in jasmine test
我遇到了使用angular ui-router為AngularJS應用程序編寫茉莉花測試的問題。 我的服務和應用程序在測試中正確初始化,但是控制器無法正常啟動。 我已經從等式中刪除了有問題的應用程序,並將問題簡化為一個表現出相同行為的簡單控制器示例。 這是實際的測試代碼:
describe('Test', function() {
var async = new AsyncSpec(this);
var scope = {};
beforeEach(angular.mock.module('TestApp'));
beforeEach(angular.mock.inject(function($rootScope, $state, $templateCache) {
scope.$rootScope = $rootScope;
scope.$state = $state;
$templateCache.put('start.html', '<div class="start"></div>');
}));
async.it('Test that TestCtrl is initialized', function(done) {
scope.$rootScope.status = { done: false };
scope.$rootScope.$on('$stateChangeSuccess', function(event, state, params) {
expect(scope.$rootScope.status.done).toBe(true);
done();
});
scope.$state.transitionTo('start', {}, { notify: true });
scope.$rootScope.$apply();
});
});
這是完整的可運行測試
應用程序已正確初始化,ui路由器能夠將應用程序轉換為正確的狀態,但控制器未初始化。 當路由器將關鍵配置傳遞給它們時,我需要路由器初始化控制器。 我想避免在測試中重復該配置。
我一定想念什么,但是呢? 感謝您提供的所有意見,謝謝!
您需要使用$ controller服務在測試中實例化控制器並將其傳遞給您的范圍。 例如...
ctrl = $controller('TestCtrl', {$scope: scope});
注意,我還將$ rootScope.done的聲明移到了TestCtrl上,以防止有關$ rootScope.done的錯誤被定義。 這是小提琴...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.