加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angularjs – 在Controller中测试命名函数

发布时间:2020-12-17 07:35:57 所属栏目:安全 来源:网络整理
导读:一个新手Jasmine / Angular问题. 我在控制器中有一个命名函数,如下所示: .controller( 'DummyCtrl',function DummyCtrl($scope){ var doSomething = function() { return "blah"; };}) 我需要测试这个函数,并尝试通过调用以下Jasmine规范: describe ('myAp
一个新手Jasmine / Angular问题.

我在控制器中有一个命名函数,如下所示:

.controller( 'DummyCtrl',function DummyCtrl($scope){
   var doSomething = function() {
      return "blah";
   };
})

我需要测试这个函数,并尝试通过调用以下Jasmine规范:

describe ('myApp',function(){
  var $scope,$controller;
  var DummyCtrl;

  beforeEach(module('myApp'));

  describe('controllers',function(){
    beforeEach(inject(function ($controller,$rootScope){
      $scope = $rootScope.$new();
      DummyCtrl = $controller('DummyCtrl',{$scope: $scope});
    }));

    describe( 'DummyCtrl',function(){
            var blah;

            beforeEach(function(){
                blah = DummyCtrl.doSomething();
            });

            it('should do something',function(){
                expect(blah).toContain("blah");
            });
    });
  });
});

我没有解决问题,而是导致以下错误:TypeError:Object#< DummyCtrl>没有方法’doSomething’.我假设这是一个非常简单的东西,我不理解.

从某种意义上说,使用这样的函数是私有的,不能从函数外部访问.看看这个链接: http://javascript.crockford.com/private.html

基本上所说的是在javascript中有一个函数/对象,任何东西都有这个. prefix是public,任何带有var前缀的东西都是私有的.

对于Angular,您肯定可以拥有私有变量和函数,如果不仅仅是为了减少$scope变量的内存使用量.私有函数应该由$scope对象调用,以获取用户显示/使用的值.尝试将其更改为:

.controller( 'DummyCtrl',function DummyCtrl($scope){
   var doSomething = function() {
      return "blah";
   };
   $scope.something=doSomething();
})

然后用以下方法测试私有函数:

describe( 'DummyCtrl',function(){
    var scope = {},ctrl = new DummyCtrl(scope);
    it('should do something',function(){
        expect(scope.something).toMatch('blah');
    });
});

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读