当前位置:   article > 正文

vue中的单元测试_vue unit testing

vue unit testing

先介绍一下什么是单元测试:

在计算机编程中,单元测试(英語:Unit Testing)又称为模块测试,是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。 程序单元是应用的最小可测试部件。 在过程化编程中,一个单元就是单个程序、函数、过程等;对于面向对象编程,最小单元就是方法,包括基类(超类)、抽象类、或者派生类(子类)中的方法。

需要了解的三个概念:

  • BDD(Behavior Driven Development):行为驱动开发,通过自然语言书写非程序员可读的测试用例扩展了测试驱动开发方法。
  • TDD(Test Driven Development):测试驱动开发,根据产品经理写的需求,翻译成测试用例的驱动开发方法。
  • Assert:断言,目的是为了标示与验证程序开发者预期的结果-当程序运行到断言的位置时,对应的断言应该为真。若断言不为真时,程序会中止运行,并给出错误消息。

简单的例子,5个测试用例,测试button组件中的icon、loading、icon的左右位置、click点击事件:

  1. //单元测试 chai库
  2. import chai from 'chai'
  3. import spies from 'chai-spies'
  4. chai.use(spies)
  5. const expect = chai.expect
  6. // icon
  7. {
  8. const Constructor = Vue.extend(Button)
  9. const vm = new Constructor({
  10. propsData: {
  11. icon: 'settings'
  12. }
  13. })
  14. vm.$mount()
  15. let useElement = vm.$el.querySelector('use')
  16. //断言href等于#i-settings,一个输入等于一个输出,没有报错则测试通过
  17. let href = useElement.getAttribute('xlink:href')
  18. expect(href).to.equal('#i-settings')
  19. vm.$el.remove()
  20. vm.$destroy()
  21. }
  22. // loading
  23. {
  24. const Constructor = Vue.extend(Button)
  25. const vm = new Constructor({
  26. propsData: {
  27. icon: 'settings',
  28. loading: true
  29. }
  30. })
  31. vm.$mount()
  32. let useElement = vm.$el.querySelector('use')
  33. let href = useElement.getAttribute('xlink:href')
  34. expect(href).to.equal('#i-loading')
  35. vm.$el.remove()
  36. vm.$destroy()
  37. }
  38. // icon的前后顺序
  39. {
  40. const div = document.createElement('div')
  41. document.body.appendChild(div)
  42. const Constructor = Vue.extend(Button)
  43. const vm = new Constructor({
  44. propsData: {
  45. icon: 'settings',
  46. }
  47. })
  48. vm.$mount(div)
  49. let svg = vm.$el.querySelector('svg')
  50. let {order} = window.getComputedStyle(svg)
  51. expect(order).to.equal('1')
  52. vm.$el.remove()
  53. vm.$destroy()
  54. }
  55. {
  56. const div = document.createElement('div')
  57. document.body.appendChild(div)
  58. const Constructor = Vue.extend(Button)
  59. const vm = new Constructor({
  60. propsData: {
  61. icon: 'settings',
  62. iconPosition: 'right'
  63. }
  64. })
  65. vm.$mount(div)
  66. let svg = vm.$el.querySelector('svg')
  67. let {order} = window.getComputedStyle(svg)
  68. expect(order).to.equal('2')
  69. vm.$el.remove()
  70. vm.$destroy()
  71. }
  72. // button 点击事件
  73. {
  74. //mock
  75. const Constructor = Vue.extend(Button)
  76. const vm = new Constructor({
  77. propsData: {
  78. icon: 'settings',
  79. }
  80. })
  81. vm.$mount()
  82. //间谍函数,劫持真正的函数
  83. let spy = chai.spy(() => {
  84. })
  85. vm.$on('click', spy)
  86. // 希望这个函数被执行
  87. let button = vm.$el
  88. button.click()
  89. expect(spy).to.have.been.called()
  90. vm.$el.remove()
  91. vm.$destroy()
  92. }

当这5个测试用例中的断言全部没有报错并通过,即button组件单元测试完成。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/820727
推荐阅读
相关标签
  

闽ICP备14008679号