# λ·° ν…ŒμŠ€νŠΈ μ½”λ“œ μ‹œμž‘ν•˜κΈ°

μ•žμ—μ„œ μ„€μΉ˜ν•œ λ·° ν…ŒμŠ€νŠΈ μœ ν‹Έ 라이브러리λ₯Ό μ΄μš©ν•˜μ—¬ κ°„λ‹¨ν•œ ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μž‘μ„±ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

# λ·° μ»΄ν¬λ„ŒνŠΈ ν…ŒμŠ€νŠΈ μ½”λ“œ μ˜ˆμ‹œ

μ•„λž˜μ˜ μ½”λ“œλ₯Ό 가지고 npm tλ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€.

<!-- HelloWorld.vue -->
<template>
  <div>Hello {{ message }}</div>
</template>

<script>
export default {
  data() {
    return {
      message: 'Vue!'
    }
  }
}
</script>
// helloworld.test.js
import Vue from 'vue';
import HelloWorld from './HelloWorld.vue';

test('HelloWorld Component', () => {
  const cmp = new Vue(HelloWorld).$mount();
  expect(cmp.message).toBe('Vue!');
});

μ½”λ“œκ°€ μ‹€ν–‰λ˜λ©΄ HelloWorld μ»΄ν¬λ„ŒνŠΈκ°€ μ •μƒμ μœΌλ‘œ λ‘œλ”©λ˜λ©΄μ„œ ν…ŒμŠ€νŠΈκ°€ ν†΅κ³Όλ©λ‹ˆλ‹€.

TIP

HelloWorld μ»΄ν¬λ„ŒνŠΈ 파일 경둜λ₯Ό μ£Όμ˜ν•˜μ„Έμš”.

# λ·° ν…ŒμŠ€νŠΈ μœ ν‹Έ APIλ₯Ό μ΄μš©ν•œ μ»΄ν¬λ„ŒνŠΈ ν…ŒμŠ€νŠΈ

μ•žμ—μ„œ μ‚΄νŽ΄λ³Έ ν…ŒμŠ€νŠΈ μ½”λ“œμ˜ 번거둜운 점은 μ»΄ν¬λ„ŒνŠΈμ˜ κΈ°λŠ₯을 ν…ŒμŠ€νŠΈν•˜κΈ° μœ„ν•΄ 맀번 λ·° μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜κ³  $mount() APIλ₯Ό ν˜ΈμΆœν•΄μ•Ό ν•œλ‹€λŠ” μ μž…λ‹ˆλ‹€.

λ‹€ν–‰νžˆλ„ λ·° ν…ŒμŠ€νŠΈ μœ ν‹Έ λΌμ΄λΈŒλŸ¬λ¦¬μ—μ„œ 이 반볡 μž‘μ—…μ„ νŽΈν•˜κ²Œ ν•΄μ£ΌλŠ” APIλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. λ°”λ‘œ shallowMount()와 mount()μž…λ‹ˆλ‹€. 이 두 API의 차이점은 Testing Applications - API μ±•ν„°μ—μ„œ μ‚΄νŽ΄λ³΄λ„λ‘ ν•˜κ³ , λ¨Όμ € shallowMount() APIλ₯Ό μ‚¬μš©ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

μ•žμ—μ„œ μ‚΄νŽ΄λ³Έ μ½”λ“œμ— shallowMount() APIλ₯Ό μ μš©ν•΄λ΄€μŠ΅λ‹ˆλ‹€.


Β 



Β 



// helloworld.test.js
import { shallowMount } from '@vue/test-utils';
import HelloWorld from './HelloWorld.vue';

test('HelloWorld Component', () => {
  const wrapper = shallowMount(HelloWorld);
  expect(wrapper.vm.message).toBe('Vue!');
});

λ·° ν…ŒμŠ€νŠΈ λΌμ΄λΈŒλŸ¬λ¦¬μ—μ„œ shallowMount() APIλ₯Ό 뢈러온 ν›„ HelloWorld μ»΄ν¬λ„ŒνŠΈμ˜ message 속성을 ν…ŒμŠ€νŠΈ ν•˜μ˜€μŠ΅λ‹ˆλ‹€. μ•žμ„œ μ‚΄νŽ΄λ³Έ μ½”λ“œμ™€ μ°¨μ΄λ‚˜λŠ” 뢀뢄은 μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

// λ·° ν…ŒμŠ€νŠΈ μœ ν‹Έ APIλ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šμ€ 경우
const cmp = new Vue(HelloWorld).$mount();
// λ·° ν…ŒμŠ€νŠΈ μœ ν‹Έ APIλ₯Ό μ‚¬μš©ν•œ 경우
const wrapper = shallowMount(HelloWorld);

new Vue().$mount()둜 μ ‘κ·Όν•˜λ˜ ν˜•μ‹μ„ mount()둜 κ°„μ†Œν™” ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

# μ»΄ν¬λ„ŒνŠΈ ν…ŒμŠ€νŒ… κ΄€λ ¨ API

μ•žμ—μ„œ μ‚΄νŽ΄λ³Έ shallowMount() API 이외에 mount() API도 ν…ŒμŠ€νŠΈ ν•  λ•Œ 자주 μ‚¬μš©λ©λ‹ˆλ‹€. shallowMount()λŠ” μ§€μ •λœ μ»΄ν¬λ„ŒνŠΈμ˜ λ‚΄μš©λ§Œ ν…ŒμŠ€νŠΈν•  λ•Œ μ‚¬μš©ν•˜κ³ , mount()λŠ” ν•΄λ‹Ή μ»΄ν¬λ„ŒνŠΈμ— λ“±λ‘λœ ν•˜μœ„ μ»΄ν¬λ„ŒνŠΈμ˜ λ‚΄μš©λ“€κΉŒμ§€ 확인할 λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€. 더 μžμ„Έν•œ λ‚΄μš©μ€ Testing Applications - APIμ—μ„œ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.