Nuxt Test Utils で始める効率的な Nuxt アプリケーションのテスト
by
wattanx
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
STORES 株式会社 Nuxt Test Utils で始める効率的な Nuxt アプリケーションのテスト
Slide 2
Slide 2 text
目次 2 自己紹介 はじめに Nuxt Test Utils を使った Unit Test Nuxt Test Utils を使った E2E Test まとめ 01 02 03 04 05
Slide 3
Slide 3 text
自己紹介
Slide 4
Slide 4 text
渡邊 涼太(wattanx) ・STORES 株式会社 ソフトウェアエンジニア。 ・STORES ネットショップの開発に関わっている。 ・猫が好き。大阪在住。 ・Nuxt Bridge のコアコントリビュータ。 ・https://twitter.com/pontaxx 自己紹介
Slide 5
Slide 5 text
STORES について
Slide 6
Slide 6 text
STORES の事業 お店のデジタルを まるっとサポート。 個人や中小事業の方々に向けて、 お店のデジタル化をまるっと 実現できる価値を提供しています。
Slide 7
Slide 7 text
はじめに
Slide 8
Slide 8 text
はじめに(今日話すこと) @nuxt/test-utils を用いた Nuxt 3 アプリケーションの Unit Test, E2E Test について話します。
Slide 9
Slide 9 text
はじめに(今日話さないこと) Nuxt 2 のテストや テスティングフレームワーク自体には あまり触れません
Slide 10
Slide 10 text
はじめに @nuxt/test-utils を知っていますか?
Slide 11
Slide 11 text
はじめに(@nuxt/test-utils とは) ● https://github.com/nuxt/test-utils ● Nuxt 3 アプリケーションの Unit Test, E2E Test を書きやすくするライブラリ @nuxt/test-utils とは
Slide 12
Slide 12 text
はじめに(@nuxt/test-utils とは) plugins で inject された モジュール API Request Auto Import Nuxt 3 アプリケーションのよくあるコード
Slide 13
Slide 13 text
はじめに(@nuxt/test-utils とは) ● plugins で inject された モジュール ○ Nuxt アプリケーションを立ち上げなければ動かない ■ なのでモックする必要がある ● API Request ○ モックする必要がある ● Auto Import ○ unimport を使って、vitest.config を設定したりすればなんとか なる
Slide 14
Slide 14 text
はじめに(@nuxt/test-utils とは) ● plugins で inject された モジュール ○ Nuxt アプリケーションを立ち上げなければ動かない ■ なのでモックする必要がある ● API Request ○ モックする必要がある ● Auto Import ○ unimport を使って、vitest.config を設定したりすればなんとか なる @nuxt/test-utils で 全て解決します
Slide 15
Slide 15 text
はじめに(@nuxt/test-utils とは) ● @nuxt/test-utils は Nuxt Runtime 環境でテストを実行できる ● API Request を nitro エンドポイントを作成してモックできる。 ● 設定不要で Auto Import が動作する。 ● 便利な Helpers がある。 ● E2E Test もサポートしている
Slide 16
Slide 16 text
@nuxt/test-utils を使った Unit Test
Slide 17
Slide 17 text
@nuxt/test-utils を使った Unit Test ● Nuxt Runtime 環境を必要とするコードを Unit Test する ための環境を提供している ● 現在は Vitest のみサポートしている。 Unit Test
Slide 18
Slide 18 text
@nuxt/test-utils を使った Unit Test セットアップ vitest.config.ts を作成し、以下のような設定を書きます。
Slide 19
Slide 19 text
@nuxt/test-utils を使った Unit Test ● .nuxt. をつける。(my-file.nuxt.test.ts, my-file.nuxt.spec.ts) ● または `@vitest-environment nuxt` を テストファイルに書くことで Nuxt Runtime 環境でテストが実行さ れる
Slide 20
Slide 20 text
@nuxt/test-utils を使った Unit Test Nuxt Runtime 環境でテストができるので ● plugins や middleware, modules が実行された環境でテストが実行 できる。 ● Auto Import も 設定不要で動作する。
Slide 21
Slide 21 text
@nuxt/test-utils を使った Unit Test なんと便利なモックや Helpers も用意されている
Slide 22
Slide 22 text
@nuxt/test-utils を使った Unit Test ● IntersectionObserver API ● IndexedDB API Built in Mocks
Slide 23
Slide 23 text
@nuxt/test-utils を使った Unit Test config に設定するだけで利用可能
Slide 24
Slide 24 text
@nuxt/test-utils を使った Unit Test Helpers
Slide 25
Slide 25 text
@nuxt/test-utils を使った Unit Test ● Nuxt アプリケーション内で任意のコンポーネントをマウ ントし、async setup を使用可能にする。 mountSuspended
Slide 26
Slide 26 text
@nuxt/test-utils を使った Unit Test Vue Test Utils の Docs によると Suspense で囲ったりする必要がある
Slide 27
Slide 27 text
@nuxt/test-utils を使った Unit Test mountSuspended の 例 top level await なので async setup
Slide 28
Slide 28 text
@nuxt/test-utils を使った Unit Test ● mountSuspended の @testing-library/vue 版 renderSuspended
Slide 29
Slide 29 text
@nuxt/test-utils を使った Unit Test ● Nuxt の Auto Import している関数をモックすることがで きる。 ○ Auto Import を使っていなくても利用可能 mockNuxtImport
Slide 30
Slide 30 text
@nuxt/test-utils を使った Unit Test 明示的にimportしている場合のモック(mockNuxtImport を使わない) 明示的にimportする場合は #imports でimportできる mockNuxtImport がない場合は こんなに書く必要がある
Slide 31
Slide 31 text
@nuxt/test-utils を使った Unit Test mockNuxtImport の 例 Auto Import or 明示的に import した navigateTo navigateTo を mock してる
Slide 32
Slide 32 text
@nuxt/test-utils を使った Unit Test ● Component をモックできる mockComponent
Slide 33
Slide 33 text
@nuxt/test-utils を使った Unit Test mockComponent の 例 Component名でモックできる 相対パスまたはエイリアスでもいい
Slide 34
Slide 34 text
@nuxt/test-utils を使った Unit Test mockNuxtImport や mockComponent は macro テストを見ると どう変換されるかわかりやすい
Slide 35
Slide 35 text
@nuxt/test-utils を使った Unit Test ● モックデータを返す Nitro エンドポイントを作成できる。 API にリクエストしてデータを表示するコンポーネントを テストしたい場合に便利。 ○ 外部の API もモック可能。 registerEndpoint
Slide 36
Slide 36 text
@nuxt/test-utils を使った Unit Test registerEndpoint の 例 API Request を mockしてる (nitro endpoint が作成されている) API Request
Slide 37
Slide 37 text
@nuxt/test-utils を使った E2E Test
Slide 38
Slide 38 text
@nuxt/test-utils を使った E2E Test ● Jest と Vitest をテストランナーとした E2E Test を サ ポートしている E2E Test
Slide 39
Slide 39 text
@nuxt/test-utils を使った E2E Test テストの設定を書く server でレンダリングされた ページを返す
Slide 40
Slide 40 text
@nuxt/test-utils を使った E2E Test @nuxt/test-utils が提供する fetch(url) を使うと、body や headers の検証もできる
Slide 41
Slide 41 text
@nuxt/test-utils を使った E2E Test browser を使ったテストもできる(Playwright を使用) full URLを返すヘルパー (テストで動いているサーバーのportも含む)
Slide 42
Slide 42 text
@nuxt/test-utils を使った E2E Test @nuxt/test-utils/runtime と @nuxt/test-utils/e2e は 同一ファイルに書くことができない その場合はファイルを分けることで解決できる (例) ● Unit Test: my-file.nuxt.spec.ts ● E2E Test: my-file.e2e.spec.ts 注意点
Slide 43
Slide 43 text
@nuxt/test-utils を使った E2E Test 使い分け(個人的な考え) ● Unit Test ○ Nuxt に依存した機能を利用している かつ クライアントサイドのテストしたい場合。 ● E2E (without browser) ○ サーバーサイドのテストがしたい場合 ■ server plugins や server middleware 含めて ● E2E(with browser) ○ サーバー・クライアントサイド通してテストしたい場合。
Slide 44
Slide 44 text
まとめ
Slide 45
Slide 45 text
まとめ ● @nuxt/test-utils は Nuxt Runtime 環境でテストを実行できる ● API Request を nitro エンドポイントを作成してモックできる。 ● 設定不要で Auto Import が動作する。 ● 便利な Helpers がある。 ● E2E Test もサポートしている
Slide 46
Slide 46 text
まとめ STORES のオフィスでわいわい🍻🍣しませんか! 3月28日(木)19:00〜
Slide 47
Slide 47 text
まとめ STORES のオフィスでわいわい🍻🍣しませんか! 3月28日(木)19:00〜