Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
テストライブラリによってコンポーネントテストの実行時間はどう変わるか / compone...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Daichi KUDO
February 14, 2025
140
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
テストライブラリによってコンポーネントテストの実行時間はどう変わるか / component-test-performance-by-library
https://voicy.connpass.com/event/342447/
Startup Angular #9 バレンタインLT会 での発表資料
Daichi KUDO
February 14, 2025
More Decks by Daichi KUDO
See All by Daichi KUDO
pnpmでできるサプライチェーン攻撃への備え / Pnpm Security Practices
da1chi
3
930
ゲームから学ぶUX設計 / UX Design Inspired from Games
da1chi
0
520
エンジニアが始める UXリサーチ 入門 / Introduction of UX Research
da1chi
0
650
登壇は dynamic! な営みである / speech is dynamic
da1chi
0
890
Web Components で実現する Hotwire とフロントエンドフレームワークの橋渡し / Bridging with Web Components
da1chi
3
7.6k
Hotwireで簡単に非同期処理のユーザー通知を作る / broadcast using Turbo
da1chi
1
220
Blue/Greenデプロイの導入による 運用フローの改善
da1chi
1
1.2k
Featured
See All Featured
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6.1k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.2k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
560
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2.1k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
630
Tell your own story through comics
letsgokoyo
1
1.1k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.8k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.3k
Why Our Code Smells
bkeepers
PRO
340
58k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
The SEO identity crisis: Don't let AI make you average
varn
0
590
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
520
Transcript
テストライブラリによって コンポーネントテストの実行時間は どう変わるか? Startup Angular #9 バレンタインLT会 2025-02-14 @Classi. Corp
daichi(だいち)
daichi(だいち) 2022〜2025 Angular, Tools, CI/CD @da1chi24
コンポーネントテストとは
コンポーネントテストとは ① 対象のコンポーネントをレンダリングする
コンポーネントテストとは ② レンダリングしたコンポーネントを操作する
コンポーネントテストとは ③ 振る舞いを検証する
利用できるライブラリ Jasmine jest Web Test Runner vitest 📝 右にいくほど新しい
どれを選べばいいのか?
実行時間で比較してみよう
用意したコンポーネント
1. 各 input に値を入力 2. Submit ボタンをクリック 3. EventEmitterが発火し、入力された値が formData()
の引数として渡される 実施するテストケース
ひたすら実行しコマンド実行〜終了まで計測 ✖ 1000
• Karma (Headless Chrome) • Web Test Runner (Headless Chrome)
• Jest (jsdom) • Vitest + Webdriverio (Headless Chrome) • Vitest + Playwright (Headless Chromium) • Vitest + jsdom 検証するテストライブラリ
計測結果 ※あくまで参考値なので雰囲気だけ掴んでもらえると GitHub Actionsで実行した結果をグラフにしたもの https://github.com/kudoas/benchmark-component-test-for-angular/actions/runs/13299959177/job/37139499475 🥇 🥈 🥉
なぜ実行時間に差が出るのか?
🗂 glob • テスト対象の実行ファイルの集計 🛠 setup (テスト集計後〜テスト実行前) • テスト実行環境の準備、依存関係の解決、テストコードの変換 etc.
🧪 assertion • テストの実行 テストを実行するステップをざっくりいうと...
計測結果をステップで分けると傾向が見えるかも 📝GlobとSetupを分割して計測するの難しかったので、 Assertion以外の時間としてまとめています
Glob + Setup
テストコードを変換するバンドルツールの違い Webpack jest Web Test Runner vitest ts-jest
esbuild は Glob + Setup の時間が短い 📝ただし今回はテストファイルは少ないため、大きな差になっていない可能性あり +α
Assertion
Node.jsでエミュレートしてレンダリングする DOM API を実行し、コンポーネントを操作する コンポーネントがレンダリングされる場所の違い jsdom jest vitest ➕
実際のブラウザでコンポーネントをレンダリングする 実際のブラウザでコンポーネントを操作する コンポーネントがレンダリングされる場所の違い vitest ➕ webdriverio or playwright Web Test
Runner
ブラウザ操作のアーキテクチャの違い https://zenn.dev/togami2864/articles/65af759b4a34f6 📝優良記事なので興味ある方はぜひ! 今回使ったライブラリのものだけ話します
一方向にHTTP通信を行って操作する。間にDriverが必要 毎回通信するため、ブラウザ操作に時間がかかる Webdriver Protocol ➕ webdriverio Browser Automation Tools Protocols
– Webdriver vs CDP
WebSocketでコネクションする。Driverを介さない Webdriver Protocolよりも安定していて速い Chrome Devtools Protocol (CDP) Playwright 01: Selenium
- Playwright architecture comparison playwright Web Test Runner
Assertionはwebdriver > jsdom ≒ CDP 📝 CDPがjsdomと同じくらいの時間になったのが意外🧐 +α CDP CDP
jsdom jsdom webdriver
(余裕あったら) Karmaのアーキテクチャ https://karma-runner.github.io/6.4/intro/how-it-works.html 実行プロセス ① Node.js のサーバーが起動 ② ブラウザを立ち上げて websocketで通信
③ ブラウザ上に配置された iframe でテストスクリプトを実行する 👉 起動までは時間がかかるが、テストの実行自体は早 い
📝 周辺ライブラリやプロトコルの組み合わせによって、同じ テストでも実行時間は異なる ⚠ かなり限られた状況での検証だったので、実運用だと違 う場合は十分ありうる 知見ある方はぜひ話しましょう! 最後に、テストの実行時間と一概に言っても...
daichi(だいち) 2022〜2025 Angular, Tools, CI/CD @da1chi24
• コンポーネントテストの手法とその効果を考える • 次世代のブラウザテスト自動化プロトコルWeb Driver BiDi • Playwright 01: Selenium
- Playwright architecture comparison • Browser Automation Tools Protocols – Webdriver vs CDP この発表で参考にさせていただいた資料一覧