테스트코드
🍟 jest 에서 setTimeOut,setInterVal을 사용하기
frontChoi
2024. 2. 27. 07:40
반응형
🥗 setTimeOut
개발을 하는 도중 setTimeOut을 만나게 되었고,이것을 어떻게 테스트 할 것인가에 대한 고민이 있었다.
jest 문서를 보는 도중 jest.useFakeTimers 를 발견하였다.
아래는 vue 소스이다.
5초후 count값이 1이되었는지 확인이 필요하다.
<template>
<div>
<p id="count">{{ count }}</p>
</div>
</template>
<script>
export default {
name: 'TimeOut',
data() {
return {
count: 0,
}
},
created() {
setTimeout(() => {
this.count++
}, 5000)
},
mounted() {},
methods: {},
destroyed() {
}
}
</script>
<style scoped></style>
아래는 테스트 코드이다.
jest.useFakeTimers 를 통해 timer함수를 다 mock으로 바꿔준다.
jest.advanceTimersByTime(n) 를 통해 n 초 후 빨리감기로 이동한다.
afterEach에서 jest.clearAllTimers를 통해 clear 한다
import { shallowMount } from '@vue/test-utils'
import timeOut from '@/views/mainLayout/timeOut.vue'
describe('timeOut Testing', () => {
let wrapper = null
//jest.useFakeTimers()
beforeEach(() => {
wrapper = shallowMount(timeOut)
})
afterEach(() => {
jest.clearAllTimers()
})
test('5초 후 화면에서 count값이 2로 된다', async () => {
const count = wrapper.findComponent('#count')
jest.advanceTimersByTime(5000)
await wrapper.vm.$nextTick()
expect(parseInt(count.text())).toBe(1)
})
})
🌯 setInterval
setTimeOut과 마찬가지로 interval도 같은 방식으로 처리 할 수 있다.
<template>
<div>
<p id="intervalCount">{{ intervalCount }}</p>
</div>
</template>
<script>
export default {
name: 'TimeOut',
data() {
return {
intervalCount: 0,
intervalId: -1
}
},
created() {
this.intervalId = setInterval(() => {
this.intervalCount++
}, 1000)
},
mounted() {},
methods: {},
destroyed() {
clearInterval(this.intervalId)
}
}
</script>
<style scoped></style>
테스트 코드
import { shallowMount } from '@vue/test-utils'
import timeOut from '@/views/mainLayout/timeOut.vue'
describe('timeOut Testing', () => {
let wrapper = null
//jest.useFakeTimers()
beforeEach(() => {
wrapper = shallowMount(timeOut)
})
afterEach(() => {
jest.clearAllTimers()
})
test('1초마다 intervalCount를 증가시킨다', async () => {
const count = wrapper.findComponent('#intervalCount')
jest.advanceTimersByTime(1000)
await wrapper.vm.$nextTick()
expect(parseInt(count.text())).toBe(1)
})
})
반응형