test(component): Quiz
parent
32866735f4
commit
e0b57f0895
|
@ -1,43 +1,55 @@
|
||||||
import { createLocalVue, shallowMount } from '@vue/test-utils';
|
import { createLocalVue, shallowMount } from '@vue/test-utils';
|
||||||
import Vuex from 'vuex';
|
import Vuex from 'vuex';
|
||||||
import Quiz from '../../../src/components/Quiz.vue';
|
import Quiz from '../../../src/components/Quiz.vue';
|
||||||
|
import router from '@/router';
|
||||||
|
|
||||||
const localVue = createLocalVue();
|
const localVue = createLocalVue();
|
||||||
|
|
||||||
localVue.use(Vuex);
|
localVue.use(Vuex);
|
||||||
|
|
||||||
const $store = new Vuex.Store({
|
const checkAnswerMock = jest.fn();
|
||||||
modules: {
|
|
||||||
questions: {
|
|
||||||
namespaced: true,
|
|
||||||
state: {
|
|
||||||
index: 0,
|
|
||||||
score: 0,
|
|
||||||
questions: [{ answer: 1, text: 'test' }],
|
|
||||||
},
|
|
||||||
getters: {
|
|
||||||
currentQuestion: () => ({
|
|
||||||
text: 'currentQuestion',
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
schools: {
|
|
||||||
namespaced: true,
|
|
||||||
state: {
|
|
||||||
schools: [],
|
|
||||||
},
|
|
||||||
getters: {},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
const resetMock = jest.fn();
|
let isLastQuestionMock = false;
|
||||||
|
let $store: any;
|
||||||
|
let wrapper: any;
|
||||||
|
|
||||||
const wrapper = shallowMount(Quiz, {
|
describe('Component - Quiz', () => {
|
||||||
mocks: { $store },
|
beforeEach(() => {
|
||||||
});
|
jest.resetAllMocks();
|
||||||
|
jest.restoreAllMocks();
|
||||||
|
|
||||||
|
$store = new Vuex.Store({
|
||||||
|
modules: {
|
||||||
|
questions: {
|
||||||
|
namespaced: true,
|
||||||
|
state: {
|
||||||
|
index: 0,
|
||||||
|
score: 0,
|
||||||
|
questions: [{ answer: 1, text: 'test' }],
|
||||||
|
},
|
||||||
|
getters: {
|
||||||
|
currentQuestion: () => ({
|
||||||
|
text: 'currentQuestion',
|
||||||
|
}),
|
||||||
|
checkAnswer: () => checkAnswerMock,
|
||||||
|
isLastQuestion: () => isLastQuestionMock,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
schools: {
|
||||||
|
namespaced: true,
|
||||||
|
state: {
|
||||||
|
schools: [{ id: 1, name: 'school1' }],
|
||||||
|
},
|
||||||
|
getters: {},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
wrapper = shallowMount(Quiz, {
|
||||||
|
mocks: { $store },
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe('Component - ScoreScreen', () => {
|
|
||||||
it('should display question', () => {
|
it('should display question', () => {
|
||||||
expect(wrapper.find('#question_text').text()).toBe('currentQuestion');
|
expect(wrapper.find('#question_text').text()).toBe('currentQuestion');
|
||||||
});
|
});
|
||||||
|
@ -46,10 +58,67 @@ describe('Component - ScoreScreen', () => {
|
||||||
expect(wrapper.find('span.progress').text()).toBe('(1/1)');
|
expect(wrapper.find('span.progress').text()).toBe('(1/1)');
|
||||||
});
|
});
|
||||||
|
|
||||||
// Errored :(
|
it('should only increase index', () => {
|
||||||
it.skip('should call reset state function', () => {
|
const dispatchMock = spyOn($store, 'dispatch');
|
||||||
wrapper.find('.choice-btn').trigger('click');
|
const routerMock = spyOn(router, 'push');
|
||||||
|
|
||||||
expect(resetMock).toBeCalledTimes(1);
|
checkAnswerMock.mockImplementation(() => false);
|
||||||
|
isLastQuestionMock = false;
|
||||||
|
|
||||||
|
wrapper
|
||||||
|
.findAll('.choice-btn')
|
||||||
|
.at(0)
|
||||||
|
.trigger('click');
|
||||||
|
|
||||||
|
expect(checkAnswerMock).toBeCalledTimes(1);
|
||||||
|
expect(checkAnswerMock).toBeCalledWith({ answer: 1 });
|
||||||
|
|
||||||
|
expect(dispatchMock).toBeCalledTimes(1);
|
||||||
|
expect(dispatchMock).toBeCalledWith('questions/increaseIndex');
|
||||||
|
|
||||||
|
expect(routerMock).toBeCalledTimes(0);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should increase score and index', () => {
|
||||||
|
const dispatchMock = spyOn($store, 'dispatch');
|
||||||
|
const routerMock = spyOn(router, 'push');
|
||||||
|
|
||||||
|
checkAnswerMock.mockImplementation(() => true);
|
||||||
|
isLastQuestionMock = false;
|
||||||
|
|
||||||
|
wrapper
|
||||||
|
.findAll('.choice-btn')
|
||||||
|
.at(0)
|
||||||
|
.trigger('click');
|
||||||
|
|
||||||
|
expect(checkAnswerMock).toBeCalledTimes(1);
|
||||||
|
expect(checkAnswerMock).toBeCalledWith({ answer: 1 });
|
||||||
|
|
||||||
|
expect(dispatchMock).toBeCalledTimes(2);
|
||||||
|
expect(dispatchMock).nthCalledWith(1, 'questions/increaseScore');
|
||||||
|
expect(dispatchMock).nthCalledWith(2, 'questions/increaseIndex');
|
||||||
|
|
||||||
|
expect(routerMock).toBeCalledTimes(0);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should to score screen', () => {
|
||||||
|
const dispatchMock = spyOn($store, 'dispatch');
|
||||||
|
const routerMock = spyOn(router, 'push');
|
||||||
|
|
||||||
|
checkAnswerMock.mockImplementation(() => false);
|
||||||
|
isLastQuestionMock = true;
|
||||||
|
|
||||||
|
wrapper
|
||||||
|
.findAll('.choice-btn')
|
||||||
|
.at(0)
|
||||||
|
.trigger('click');
|
||||||
|
|
||||||
|
expect(checkAnswerMock).toBeCalledTimes(1);
|
||||||
|
expect(checkAnswerMock).toBeCalledWith({ answer: 1 });
|
||||||
|
|
||||||
|
expect(dispatchMock).toBeCalledTimes(0);
|
||||||
|
|
||||||
|
expect(routerMock).toBeCalledTimes(1);
|
||||||
|
expect(routerMock).toBeCalledWith({ name: 'scoreScreen' });
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue