source

VueX 스토어가 여러 유닛 테스트에 걸쳐 상태를 유지하는 이유는 무엇입니까?

factcode 2022. 9. 23. 00:02
반응형

VueX 스토어가 여러 유닛 테스트에 걸쳐 상태를 유지하는 이유는 무엇입니까?

페이지화 모듈의 유닛 테스트를 작성 중인데, 간단한 VueX 스토어 모듈을 가지고 있습니다.

테스트에는 Vue.js 2.5와 Mocha/Chai/Sinon을 사용하고 있습니다.셋업은 Vue CLI 3을 사용합니다.

문제는 이 시스템이currentPage하나의 유닛 테스트로 스토어에서 증가하며, 이 상태는 신규 스토어를 생성하려고 해도 다음 테스트까지 지속됩니다.

새로운 페이지 번호 모듈을 반환하는 함수를 사용하여 반환을 시도했습니다.Object.assign()새로운 카피이지만, 이것은 동작하지 않았습니다.아래 스펙과 같이 코드에 남겨두었습니다.

저장/판매.js

const state = {
  currentPage: 0
}

export const getters = {
  currentPage: state => {
    return state.currentPage
  }
}

export const actions = {

  nextPage ({ commit, state }) {
    commit('setCurrentPage', state.currentPage + 1)
  }
}

export const mutations = {
  setCurrentPage (state, page) {
    state.currentPage = page
  }
}

export default {
  namespaced: true,
  state,
  getters,
  actions,
  mutations
}

Pagination.spec.js

function getPaginationStore () {
  return Object.assign({}, pagination)
}

describe('Paginate.vue', () => {
  let localVue
  let wrapper
  let store

  beforeEach(() => {
    localVue = createLocalVue()
    localVue.use(Vuex)

    store = new Vuex.Store({
      modules: {
        pagination: getPaginationStore()
      }
    })

    wrapper = shallowMount(Pagination, {
      localVue,
      propsData: {
        items: [],
        size: 24
      },
      store
    })
  })

  afterEach(() => {
    store = null
  })

  it('state should be 0', () => {
    expect(wrapper.vm.pageNumber).to.equal(0)
    wrapper.vm.$store.dispatch('pagination/nextPage')
    expect(wrapper.vm.pageNumber).to.equal(1)
  })

  it('state should be 0 again but is 1', () => {
    // THIS TEST FAILS. IT IS ACTUALLY 1
    expect(wrapper.vm.pageNumber).to.equal(0)
  })
})

해결책은 단순한 오래된 javascript 객체가 아닌 모듈의 상태에 대한 함수를 사용하는 것이었습니다.새로운 스토어 스테이트 코드는 다음과 같습니다.

export const state = () => {
  return {
    currentPage: 0
  }
}

답변은 Vue 불일치 채널의 @SumNeuron에 의해 제공되었습니다.

언급URL : https://stackoverflow.com/questions/54556952/why-does-vuex-store-retain-state-across-multiple-unit-tests

반응형