Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将Jasmine中的angular引导到单元测试在引导后添加指令/控制器_Javascript_Angularjs_Unit Testing_Jasmine_Karma Runner - Fatal编程技术网

Javascript 如何将Jasmine中的angular引导到单元测试在引导后添加指令/控制器

Javascript 如何将Jasmine中的angular引导到单元测试在引导后添加指令/控制器,javascript,angularjs,unit-testing,jasmine,karma-runner,Javascript,Angularjs,Unit Testing,Jasmine,Karma Runner,我正试图弄清楚如何在Jasmine/Karma单元测试套件中应用angular.bootstrap,但我似乎无法将我的头脑集中在它上面 在angular.boostrap运行之后,我需要延迟加载一些组件(控制器、指令、服务等) 我看过Ben Nadel关于如何做到这一点的文章: 我可以让它正常工作 现在,我发现我想在Karma/Jasmine/PhantomJS中测试这个功能,并确保我的组件在引导后正常工作,但我不太确定如何创建设置并拆除它,以确保它已经被引导 我基本上已经发现,当我在测试中执

我正试图弄清楚如何在Jasmine/Karma单元测试套件中应用angular.bootstrap,但我似乎无法将我的头脑集中在它上面

在angular.boostrap运行之后,我需要延迟加载一些组件(控制器、指令、服务等)

我看过Ben Nadel关于如何做到这一点的文章:

我可以让它正常工作

现在,我发现我想在Karma/Jasmine/PhantomJS中测试这个功能,并确保我的组件在引导后正常工作,但我不太确定如何创建设置并拆除它,以确保它已经被引导

我基本上已经发现,当我在测试中执行典型的angular.mock.module函数来检索我的模块时,我可以继续添加控制器/指令等,而事实上在Jasmine中很好,即使我没有按照Ben N.的指示重新布线模块,我也需要这样做,以便使其直接在浏览器中工作

下面是我的代码和测试的基本示例:

(function() {
    'use strict';

    var module = angular.module('myModule', []);

    // it should not allow adding controllers after bootstrap with the following
    // commented out:

    //module.config(['$controllerProvider', function(controllerProvider) {
    //        module._controller = module.controller;
    //        module.controller = controller;
    //
    //        function controller(name, constructor) {
    //            console.log(name, constructor);
    //            return controllerProvider.register(name, constructor);
    //        }
    //    }]);


}());

describe('lazy module', function() {
    'use strict';

    beforeEach(module('myModule'));

    it('allows controllers to be added after bootstrap', function() {
        angular.module('myModule').controller('mycontroller', [
            '$scope',
            function(vm) {
                vm.add = function add() {
                    vm.sum = vm.a + vm.b;
                }
            }
        ]);
        var $scope= {};
        getController('mycontroller', {$scope:$scope});
        $scope.a = 5;
        $scope.b = 7;
        $scope.add();

        expect($scope.sum).toBe(12);
    });

    function getController(name, model){
        var controller = null;

        inject(function(_$controller_){
            controller = _$controller_(name, model);
        });

        return controller;
    }
});
除非我完全忽略了一些明显的东西,否则这个测试应该失败,但它不会

我不知道如何在Jasmine中连接东西,使其表现为模块已经启动。添加以下内容似乎没有什么不同

angular.boostrap(document, ['myModule']);
警告此问题。警告此问题。