【问题标题】:Angular Testing - trigger on change not working角度测试 - 更改触发不起作用
【发布时间】:2017-08-06 09:24:12
【问题描述】:

我有一个指令,我正在尝试对其进行单元测试,其中包含一个 on 'change' 事件:

iElement.on 'change', (evt) ->
          scope.$apply () ->
            scope.model.user.data.roles = iElement.val()

这是我的主测试代码,它初始化 scope.model 然后尝试更改它。

it 'modifies the existing role - INCOMPLETE', () ->
      scope.model = user: data: roles: Object.keys user.data.roles
      scope.$broadcast 'event:gotUser'
      scope.model.user.data.roles = ['Pizza']
      scope.$digest()
      element.triggerHandler('change')
      console.log(element.text())

不幸的是,'change' 事件没有被触发,指令返回的值是旧值:'Delicious×Delicious'

更新

固定指令:

compiled = $compile '<div <select heli-tag-control multiple="" style="width : 100%;"> </select></div>'

compiled = $compile '<div heli-tag-control multiple="" style="width : 100%;"> </div>'

更新测试:

it 'modifies the existing role - INCOMPLETE', () ->
      scope.model = user: data: roles: Object.keys user.data.roles
      scope.$broadcast 'event:gotUser'
      scope.model = user: data: roles: ['Happy', 'Banana']
      element.val(scope.model.user.data.roles).triggerHandler('change')
      expect(element.text()).to.contain 'Banana'

【问题讨论】:

    标签: javascript angularjs unit-testing mocha.js chai


    【解决方案1】:

    事实证明,我只需要再次广播我的“gotUser”事件,然后传播更改。

    完成测试:

    it 'modifies the existing role - INCOMPLETE', () ->
          scope.model = user: data: roles: Object.keys user.data.roles
          scope.$broadcast 'event:gotUser'
          scope.model = user: data: roles: ['Happy', 'Banana']
          element.val(scope.model.user.data.roles).triggerHandler('change')
          scope.$broadcast 'event:gotUser'
          expect(element.text()).to.contain 'Banana'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-05
      • 2018-09-29
      • 1970-01-01
      • 1970-01-01
      • 2016-07-11
      • 1970-01-01
      • 1970-01-01
      • 2017-11-29
      相关资源
      最近更新 更多