簡體   English   中英

Angular控制器未在茉莉花測試中初始化

[英]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的錯誤被定義。 這是小提琴...

http://jsfiddle.net/C8QtB/3/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM