编写可被测试的组件

很多组件的渲染输出由它的 props 决定。事实上,如果一个组件的渲染输出完全取决于它的 props,那么它会让测试变得简单,就好像断言不同参数的纯函数的返回值。看下面这个例子:

  1. <template>
  2. <p>{{ msg }}</p>
  3. </template>
  4. <script>
  5. export default {
  6. props: ['msg']
  7. }
  8. </script>

你可以在不同的 props 中,通过 propsData 选项断言它的渲染输出:

  1. import Vue from 'vue'
  2. import MyComponent from './MyComponent.vue'
  3. // 挂载元素并返回已渲染的文本的工具函数
  4. function getRenderedText (Component, propsData) {
  5. const Constructor = Vue.extend(Component)
  6. const vm = new Constructor({ propsData: propsData }).$mount()
  7. return vm.$el.textContent
  8. }
  9. describe('MyComponent', () => {
  10. it('renders correctly with different props', () => {
  11. expect(getRenderedText(MyComponent, {
  12. msg: 'Hello'
  13. })).toBe('Hello')
  14. expect(getRenderedText(MyComponent, {
  15. msg: 'Bye'
  16. })).toBe('Bye')
  17. })
  18. })