Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Reactにおける 良いコンポーネントテストとはなにか
Search
skanehira
December 22, 2025
440
1
Share
Reactにおける 良いコンポーネントテストとはなにか
skanehira
December 22, 2025
More Decks by skanehira
See All by skanehira
vimconf2025.pdf
skanehira
0
41
findy-ai-terminal.pdf
skanehira
2
500
Rustから学ぶ 非同期処理の仕組み
skanehira
1
400
about_gorilla.vim.pdf
skanehira
0
130
if let temporary scopeについて
skanehira
0
200
build-debugger-in-rust.pdf
skanehira
1
280
Findy感謝祭2024 LT
skanehira
0
160
Rustではじめる負荷試験
skanehira
6
2.4k
Wellcome Vim World
skanehira
3
680
Featured
See All Featured
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
170
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.3k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
Paper Plane
katiecoart
PRO
1
50k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.5k
SEO for Brand Visibility & Recognition
aleyda
0
4.6k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
190
Context Engineering - Making Every Token Count
addyosmani
9
900
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
230
Bash Introduction
62gerente
615
210k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
65
54k
Transcript
Reactにおける 良いコンポーネントテストとはなにか
自己紹介 ゴリラです。 株式会社テックリードという会社をやってい ます。 主にフロントエンド・バックエンドエンジニ アとして仕事しています。 好物は Vim, Go, Rust,
TypeScript, Deno, Wasm などです。 最近はeBPFに興味あります。 YDPN [FOOEFW (JU)VC
はじめに • 普段は業務委託でシステム開発のお手伝いしている • ここ2年くらいはVue 2からReact移行の作業をしている • Reactの知見持っている人がほぼいなかったので、チーム内でいろい ろと試行錯誤しながらやってきた •
今日は得られた知見の中で、主にコンポーネントテストについて話 ていく
Reactのテストのおさらい
Reactにおけるテスト対象 • 関数 • ステートを持たない再利用可能なロジック • 実装によるが基本的に外部への依存がない純粋関数が多い
• カスタムフック • ステートと再利用可能なロ ジックを持つ • 外部ストレージやグローバル ステートを参照する場合もあ る •
render hooksパターンでUIを 返すこともある Reactにおけるテスト対象
• コンポーネント • UI/ステート/ロジックを持つ • ユーザ操作によって状態が変わ り、UIに反映される • 関数とカスタムフックと違って UIがあるためテストが少し複雑
になりやすい Reactにおけるテスト対象
良いコンポーネントテスト とはなにか
• 10文字以上入力できない制限を持つNameInputのテスト • 実装: maxLengthの属性で入力文字数の制限をしている 良いコンポーネントテストとはなにか
• 問題 • テストが実装詳細に依存している • maxLengthからJSで入力制御に切り替えたときにテスト壊れる 良いコンポーネントテストとはなにか
• あるべき姿 • 実装詳細に依存しない、外からみえる振る舞いをテストすべき • 振る舞い = 仕様が変わらない限り、実装を変えても壊れない 良いコンポーネントテストとはなにか
• Propsで受け取ったテキストを表示しているかのテスト • 問い: このテストは何を保証しているのか? 良いコンポーネントテストとはなにか
• 問題: Reactの機能をテストしているだけ • `<h1>{title}</h1>`が表示されないことはReactがバグらない限 り、基本的にない 良いコンポーネントテストとはなにか
• あるべき姿 • ロジックがあるならテストする • なければテストしない 良いコンポーネントテストとはなにか
• data-testid を使って要素を特定してテストしている 良いコンポーネントテストとはなにか
• 問題 • 実装詳細(data-testid)に依存している • アクセシビリティを担保しづらい 良いコンポーネントテストとはなにか
• あるべき姿 • data-testidは最終手段 • アクセシビリティを意識した実装になる 良いコンポーネントテストとはなにか
まとめ
• ロジックがあるものをテスト • 透過するだけではReactの仕事 • ユーザーが使える方法で要素を探す • roleで取れる = アクセシビリティを担保&実装詳細に依存しない
• ユーザーに見える結果をテスト • 内部実装は変わっても振る舞いは変わらないのでテストが壊れない 良いコンポーネントテストとはなにか
ありがとうございました