使用Jasmine对javascript/jQuery事件进行单元测试

Unit-testing javascript/jQuery events with Jasmine

本文关键字:事件 单元测试 jQuery Jasmine javascript 使用      更新时间:2023-09-26

我有这个代码:

$(document).on('click', '#clear-button', clearCalculatedPrice)
clearCalculatedPrice = ->
    $('#price_rule').removeAttr('data-original-title')
    $('#calculated-price').removeAttr('data-original-title')
    $('#calculated-price').empty()

这样的测试对它

describe 'Call taker', ->
  it 'should clear calculated price', ->
    spyOn($.fn, 'removeAttr')
    spyOn($.fn, 'empty')
    clearCalculatedPrice()
    expect($.fn.removeAttr).toHaveBeenCalled()
    expect($.fn.empty).toHaveBeenCalled()

我需要创建另一个测试,它将检查当事件被触发时是否调用了函数,比如这个

     it 'should clear calculated price when "click" event is triggered', ->
      $('#destination-clear-button').trigger('click')
      spyOn($.fn, 'removeAttr')
      spyOn($.fn, 'empty')
      expect($.fn.removeAttr).toHaveBeenCalled()
      expect($.fn.empty).toHaveBeenCalled()

但这个测试并不像我想的那样有效。所以问题是:测试事件处理程序的单元测试应该如何编写

订单调用可能是错误的

 it 'should clear calculated price when "click" event is triggered', ->
  # set spys
  spyOn($.fn, 'removeAttr')
  spyOn($.fn, 'empty')
  # trigger
  $('#destination-clear-button').trigger('click')
  # check
  expect($.fn.removeAttr).toHaveBeenCalled()
  expect($.fn.empty).toHaveBeenCalled()