如何将闭包中定义的指令控制器加载到测试规范中

时间:2013-10-17 07:40:42

标签: javascript angularjs

我已选择在此问题的接受答案中基于选项2创建解决方案: Unit-testing directive controllers in Angular without making controller global

我的代码看起来像这样:

(function () {

    function myCtrl($scope) {
        //All my controller code.
    };

    myAppModule.directive('myDirective', function($compile, $timeout) {

        return {

            restrict: 'E',

            replace: true,

            controller: myCtrl,

            compile: function(tElement, tAttrs, transclude) {

                return {
                post: function(scope, element, attrs) {
                    //more code and stuff.
                }
            }
        }
    });
})();

我的简单问题是;因为控制器未在模块范围内定义,如何将其加载到我的测试文件中?

1 个答案:

答案 0 :(得分:0)

正如答案所解释的那样,您必须将上面的代码拆分为三个文件:

  • 所有代码最高为function myCtrl($scope) {
  • 的前缀
  • 控制器代码
  • 后缀

在构建应用程序时,将这三个文件连接成一个文件,并将结果用于高效代码。

对于测试,您只需包含中间文件。这确实会在测试的全局命名空间中创建控制器。在生产代码中,封闭避免了这种污染。