๐ŸŽฏ 6.2 props ใฎ้•ใ„ใงใ‚นใƒŠใƒƒใƒ—ใ‚ทใƒงใƒƒใƒˆใ‚’ๆ’ฎใ‚Šๅˆ†ใ‘ใ‚‹

๏ผˆComposition API ใซใŠใ‘ใ‚‹ props ๅค‰ๆ›ดใซใ‚ˆใ‚‹ใ‚นใƒŠใƒƒใƒ—ใ‚ทใƒงใƒƒใƒˆใƒ†ใ‚นใƒˆ๏ผ‰


โœ… ใ€่ฆ็‚นใ€‘

โ†’ ใƒ†ใ‚นใƒˆๆ™‚ใซ propsData ใ‚’ๅค‰ใˆใฆ mount ใ™ใ‚Œใฐใ€็ฐกๅ˜ใซๅˆ†ใ‘ใฆ็ขบ่ชใงใใ‚‹ใ€‚


๐ŸŸข ใ€ใ‚ณใƒณใƒใƒผใƒใƒณใƒˆไพ‹ใ€‘

<!-- Greeting.vue -->
<template>
  <p>Hello, {{ name }}!</p>
</template>

<script lang="ts" setup>
import { defineProps } from 'vue';

const props = defineProps<{ name: string }>();
</script>


๐ŸŸ  ใ€ใ‚นใƒŠใƒƒใƒ—ใ‚ทใƒงใƒƒใƒˆใฎๅŸบๆœฌใƒ‘ใ‚ฟใƒผใƒณใ€‘

import { shallowMount } from '@vue/test-utils';
import Greeting from '@/components/Greeting.vue';

describe('Greeting.vue (propsใ”ใจใฎใ‚นใƒŠใƒƒใƒ—ใ‚ทใƒงใƒƒใƒˆ)', () => {
  it('name ใŒ Vue ใฎๅ ดๅˆ', () => {
    const wrapper = shallowMount(Greeting, {
      propsData: { name: 'Vue' },
    });
    expect(wrapper.html()).toMatchSnapshot();
  });

  it('name ใŒ TypeScript ใฎๅ ดๅˆ', () => {
    const wrapper = shallowMount(Greeting, {
      propsData: { name: 'TypeScript' },
    });
    expect(wrapper.html()).toMatchSnapshot();
  });
});


๐ŸŸฃ ใ€่ค‡ๆ•ฐใƒ‘ใ‚ฟใƒผใƒณใ‚’ใƒซใƒผใƒ—ใงใพใจใ‚ใ‚‹๏ผˆforEach ใƒ‘ใ‚ฟใƒผใƒณ๏ผ‰ใ€‘

describe('Greeting.vue (่ค‡ๆ•ฐ props)', () => {
  const names = ['Vue', 'TypeScript', 'Jest'];

  names.forEach((name) => {
    it(`name ใŒ ${name} ใฎๅ ดๅˆ`, () => {
      const wrapper = shallowMount(Greeting, {
        propsData: { name },
      });
      expect(wrapper.html()).toMatchSnapshot();
    });
  });
});


๐ŸŸก ใ€ใ‚นใƒŠใƒƒใƒ—ใ‚ทใƒงใƒƒใƒˆใƒ•ใ‚กใ‚คใƒซใฎไพ‹ใ€‘

exports[`Greeting.vue (่ค‡ๆ•ฐ props) name ใŒ Vue ใฎๅ ดๅˆ 1`] = `
<p>Hello, Vue!</p>
`;

exports[`Greeting.vue (่ค‡ๆ•ฐ props) name ใŒ TypeScript ใฎๅ ดๅˆ 1`] = `
<p>Hello, TypeScript!</p>
`;

exports[`Greeting.vue (่ค‡ๆ•ฐ props) name ใŒ Jest ใฎๅ ดๅˆ 1`] = `
<p>Hello, Jest!</p>
`;