Angularjs   发布时间:2022-04-20  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了angularjs – 如何用茉莉花指令测试’点击’事件大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我想用茉莉花测试“点击”事件,但我不知道如何

我的指令文件就是这样(headbarDirective.js):

(function () {
        angular.module('app.widgets.homeHeadbar',[])
            .directive('homeHeadbar',homeHeadbar);

        function homeHeadbar() {
            return {
                reStrict: 'EAC',replace: true,transclude: false,scope: {
                    name: '@',role: '@',},templateUrl: 'app/widgets/headbar/headbarView.html',link: function(scope,ele,attrs) {
                    if (!scope.Name) {
                        scope.logined = false;
                    } else {
                        scope.logined = true;
                    }
                    scope.logout = function() {
                        Userservice.logout();
                        $LOCATIOn.path('/login');
                };
                }
            };
        }
    })();

我这样的模板文件(headbarView.html):

<nav>
  <div>
    <div class="navbar-right" ng-show="logined">

      <div class="dib fr ml20">
         <div class="user-name cwh">{{name}}</div>
         <div class="user-position cgray">{{rolE}}</div>
      </div>

      <a class="logout" href="javascript:;" ng-click="logout()">Log Out</a>

    </div>
  </div>
</nav>

我的测试文件就是这样(test.js):

describe('test the headbarDirective',function(){

    beforeEach(module('templates','app','app.widgets.homeHeadbar'));

    var scope,compile,simpleHtml,Userservice,LOCATIOn;

    beforeEach(inject(function(_$rootScope_,_$compile_,_Userservice_,_$LOCATIOn_){
        compile = _$compile_;
        scope = _$rootScope_.$new();
        LOCATIOn = _$LOCATIOn_;
        Userservice = _Userservice_;
    }));

    it('test the logout click',function(){
        simpleHtml = '<home-headbar name="John" role=2></home-headbar>';
        ele = compile(angular.element(simpleHtml))(scopE);
        scope.$digest();

        spyOn(Userservice,'logout').and.callThrough();

        $(elE).find('.logout').click();
        scope.$digest();

        expect(Userservice.logout).toHaveBeenCalled();
    });
});

测试失败,控制台结果如下:

Chrome 43.0.2357 (Windows 7 0.0.0) test the headbarDirective test the logout cli
ck Failed
        Expected spy logout to have been called.
            at Object.<anonymous> (C:/Users/IBM_ADMIN/desk/workspace/WaterFundWe
b/WebContent/test/unit/widgets/headbar/headbarDirective.js:48:30)
Chrome 43.0.2357 (Windows 7 0.0.0): Executed 11 of 11 (1 Failed) (0 secs / 0.124
Chrome 43.0.2357 (Windows 7 0.0.0): Executed 11 of 11 (1 Failed) (0.125 secs / 0
.124 secs)

意味着注销功能尚未被调用.
我的代码有什么问题吗?我如何测试ng-click事件?

让我测试一下,如果是,请随时“运行代码段”
angular.module('app.widgets.homeHeadbar',[])
  .directive('homeHeadbar',function homeHeadbar($LOCATIOn,UserservicE) {
    return {
      reStrict: 'EAC',scope: {
        name: '@',attrs) {
        scope.logout = function() {
          Userservice.logout();
          $LOCATIOn.path('/login');
        };
      }
    };
  });

describe('test the headbarDirective',function() {

  var scope,el,$compile,$LOCATIOn,Userservice;

  beforeEach(module('app.widgets.homeHeadbar'));

  /* stub as I don't kNow implementations for Userservice */
  beforeEach(function() {
    var _stubUserservice_ = {
      logout: jasmine.createSpy('Userservice.logout')
    };

    angular.module('app.widgets.homeHeadbar')
      .value('Userservice',_stubUserservice_);
  });

  beforeEach(inject(function($rootScope,$templateCache,_$LOCATIOn_,_Userservice_) {
    $templateCache.put('app/widgets/headbar/headbarView.html',[
      '<nav>','  <div>','    <div class="navbar-right" ng-show="logined">','      <div class="dib fr ml20">','        <div class="user-name cwh">{{name}}</div>','        <div class="user-position cgray">{{rolE}}</div>','      </div>','      <a class="logout" href="javascript:;" ng-click="logout()">Log Out</a>','    </div>','  </div>','</nav>'
    ].join(''));
    $LOCATIOn = _$LOCATIOn_;
    $compile = _$compile_;
    scope = $rootScope.$new();
    Userservice = _Userservice_;
  }));

  it('clicks on "logout" redirects to /login page',function() {
    spyOn($LOCATIOn,'path')

    simpleHtml = '<home-headbar name="John" role=2></home-headbar>';
    el = $compile(angular.element(simpleHtml))(scopE);
    scope.$digest();

    el.find('.logout').click();

    expect(Userservice.logout).toHaveBeenCalled();
    expect($LOCATIOn.path).toHaveBeenCalledWith('/login');
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link href="//safjaNowski.github.io/jasmine-jsfiddle-pack/pack/jasmine.css" rel="stylesheet" />
<script src="//safjaNowski.github.io/jasmine-jsfiddle-pack/pack/jasmine-2.0.3-concated.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular-mocks.js"></script>

大佬总结

以上是大佬教程为你收集整理的angularjs – 如何用茉莉花指令测试’点击’事件全部内容,希望文章能够帮你解决angularjs – 如何用茉莉花指令测试’点击’事件所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。