반응형
Vuex-test-utils를 사용하여 구성 요소의 VueX 상태 변경을 테스트하는 방법
나는 상점에 로드되는 백엔드의 데이터에 의존하는 매우 간단한 구성 요소를 가지고 있는데, 이 흐름에 대한 단위 테스트를 작성하고자 한다.기본적으로 내 템플릿 코드는 다음과 같다.
<div class="my-component">
<div class="loading-screen" v-if="loading"></div>
<div class="content" v-if="!loading"></div>
</div
로딩은 스토어에서 계산된 값이다.다음과 같은 테스트 시나리오로 테스트하고 싶다.
describe('My Component', () => {
let wrapper;
let actions;
let store;
let state;
let mutations;
beforeEach(() => {
actions = {};
state = {
loading: true,
};
mutations = {
finishLoading: (state) => { state.loading = false },
};
store = new Vuex.Store({
modules: {
myModule: {
namespaced: true,
state,
actions,
mutations,
}
}
});
});
test('Calls store action for data and then shows the page', () => {
wrapper = mount(MyComponent, { store, localVue });
expect(wrapper.find('.loading-screen').isVisible()).toEqual(true);
expect(wrapper.find('.content').exists()).toEqual(false);
store.commit('finishLoading');
expect(wrapper.find('.loading-screen').exists()).toEqual(false);
expect(wrapper.find('.content').isVisible()).toEqual(true);
});
});
store.commit('finishLoading') 이후의 부품이 실패함저장 데이터를 기준으로 구성 요소를 업데이트하도록 트리거하는 방법
store.commit('finishLoading') 뒤에 이 줄을 추가해 보십시오.
await wrapper.vm.$nextTick();
그리고 당신의 기능을 비동기적으로 만드는 것을 기억하라.
test('Calls store action for data and then shows the page', async () => {
나 역시 한 가지를 놓쳤다는 것을 나중에 알게 되었어!내 상점은 이름 앞에 붙어서 자연스럽게 이름 앞에 붙이지 않는다.도우미, 다음 돌연변이를 불러야겠어
store.commit('applicationApply/finishLoading');
이것은 위의 유효한 수정안에 추가된 것으로, 주요 문제를 해결한다.
반응형
'programing' 카테고리의 다른 글
C에서 배열의 최대 크기는? (0) | 2022.04.18 |
---|---|
PersistentObjectException: JPA 및 최대 절전 모드에서 해제된 독립된 엔티티가 지속되도록 전달됨 (0) | 2022.04.18 |
검색되지 않은 TypeError: Vue.component가 함수가 아님 (0) | 2022.04.18 |
CRC32 C 또는 C++ 구현 (0) | 2022.04.17 |
목록을 명시적으로 반복하지 않고 목록을 쉼표로 구분된 문자열로 변환하는 방법 (0) | 2022.04.17 |