resources/assets/js/components/ui/YouTubeVideoItem.spec.ts

Summary

Maintainability
A
2 hrs
Test Coverage
import { expect, it } from 'vitest'
import { screen } from '@testing-library/vue'
import { youTubeService } from '@/services'
import UnitTestCase from '@/__tests__/UnitTestCase'
import YouTubeVideoItem from './YouTubeVideoItem.vue'

let video: YouTubeVideo

new class extends UnitTestCase {
  private renderComponent () {
    video = {
      id: {
        videoId: 'cLgJQ8Zj3AA'
      },
      snippet: {
        title: 'Guess what it is',
        description: 'From the LA Opening Gala 2014: John Williams Celebration',
        thumbnails: {
          default: {
            url: 'https://i.ytimg.com/an_webp/cLgJQ8Zj3AA/mqdefault_6s.webp'
          }
        }
      }
    }
    return this.render(YouTubeVideoItem, {
      props: {
        video
      }
    })
  }

  protected test () {
    it('renders', () => expect(this.renderComponent().html()).toMatchSnapshot())

    it('plays', async () => {
      const mock = this.mock(youTubeService, 'play')
      this.renderComponent()

      await this.user.click(screen.getByRole('button'))

      expect(mock).toHaveBeenCalledWith(video)
    })
  }
}