Nuxt Test Utils で始める効率的な Nuxt アプリケーションのテスト
by
wattanx
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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〜