테스트/단위 테스트 (Vue)
단위 테스트 - Movie 컴포넌트
IT Blue
2021. 9. 9. 10:22
단위 테스트 - Movie 컴포넌트
Movie.vue
...
<script>
import { mapState } from 'vuex'
import Loader from '~/components/Loader'
export default {
components: {
Loader
},
data() {
return {
imageLoading: true
}
},
computed: {
...mapState('movie', [
'theMovie',
'loading'
])
},
created() {
console.log(this.$route)
this.$store.dispatch('movie/searchMovieWithId', {
// movie/tt123456
id: this.$route.params.id
})
},
methods: {
requestDiffSizeImage(url, size = 700) {
if (!url || url === 'N/A') {
this.imageLoading = false
return ''
}
const src = url.replace('SX300', `SX${size}`)
this.$loadImage(src)
.then(() => {
this.imageLoading = false
})
return src
}
}
}
</script>
...
Movie.test.js
import { shallowMount } from '@vue/test-utils'
import store from '~/store'
import router from '~/routes'
import loadImage from '~/plugins/loadImage'
import Movie from '~/routes/Movie'
describe('routes/Movie.vue', () => {
let wrapper
beforeEach(async () => {
window.scrollTo = jest.fn()
// 영화 상세 페이지 이동
router.push('/movie/tt1234567')
// 페이지 완료까지 기다림
await router.isReady()
wrapper = shallowMount(Movie, {
global: {
plugins: [
store,
router,
loadImage
]
}
})
})
test('최초 접속한 URL의 파라미터를 확인', () => {
expect(wrapper.vm.$route.params.id).toBe('tt1234567')
})
test('지정한 이미지 크기로 URL을 변경', () => {
const url = 'https://google.com/sample_image_SX300.jpg'
expect(wrapper.vm.requestDiffSizeImage(url)).toContain('SX700')
expect(wrapper.vm.requestDiffSizeImage(url, 900)).toContain('SX900')
})
test('정상적인 이미지 주소가 아닌 경우 빈 문자를 반환', () => {
expect(wrapper.vm.requestDiffSizeImage()).toBe('')
expect(wrapper.vm.requestDiffSizeImage('N/A')).toBe('')
})
})