打破惯性思维,前端工程师的任务不仅仅是和界面打交道
Vuex store天生是脱离组件,独立开来的。它是一个特殊的数据结构,使用特定的方法,更新其中的状态。

测试一个 store 是否有必要

非常有必要交互变得复杂之后,你可以脱离界面对数据的改动做测试,最大限度的保证功能的正常运行。

测试过程

  • 检查初始state是否正常
  • 触发mutations 或者actions,对于每个mutations 可以写一个case
  • 检查修改后的state是否正常
  • 测试getters
    1. import store from '@/store/index'
    2. import { testData } from '@/store/templates'
    3. import { testComponents, ComponentData } from '@/store/editor'
    4. import { clone, last } from 'lodash-es'
    5. import { textDefaultProps } from 'lego-bricks'
    6. const cloneComponents = clone(testComponents)
    7. jest.mock('ant-design-vue')
    8. describe('test vuex store', () => {
    9. it('should have three modules', () => {
    10. expect(store.state).toHaveProperty('user')
    11. expect(store.state).toHaveProperty('templates')
    12. expect(store.state).toHaveProperty('editor')
    13. })
    14. describe('test user module', () => {
    15. it('test login mutation', () => {
    16. store.commit('login')
    17. expect(store.state.user.isLogin).toBeTruthy()
    18. })
    19. it('test logout mutation', () => {
    20. store.commit('logout')
    21. expect(store.state.user.isLogin).toBeFalsy()
    22. })
    23. })
    24. describe('test templates module', () => {
    25. it('should have default templates', () => {
    26. expect(store.state.templates.data).toHaveLength(testData.length)
    27. })
    28. it('should get the correct template by Id', () => {
    29. const selectTemplate = store.getters.getTemplateById(1)
    30. expect(selectTemplate.title).toBe('test title 1')
    31. })
    32. })
    33. })