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
過剰テスト中毒とエラーテスト欠乏症 - UIテスト二大疾病の根治療法
Search
akfm
March 13, 2025
1k
5
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
過剰テスト中毒とエラーテスト欠乏症 - UIテスト二大疾病の根治療法
akfm
March 13, 2025
More Decks by akfm
See All by akfm
Next.js v15.0.0-rc.0
akifumisato
0
88
Featured
See All Featured
A better future with KSS
kneath
240
18k
Fantastic passwords and where to find them - at NoRuKo
philnash
53
4k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.4k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
810
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
230
Amusing Abliteration
ianozsvald
1
350
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.5k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6.1k
Fashionably flexible responsive web design (full day workshop)
malarkey
409
67k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
310
We Have a Design System, Now What?
morganepeng
55
8.4k
How GitHub (no longer) Works
holman
316
150k
Transcript
過剰テスト中毒と エラーテスト欠乏症 UI テスト二大疾病の根治療法 in Offers 202503
Profile 名前: 佐藤 昭文(あっきー) ID: akfm_sato 仕事: フロントエンドエキスパート 活動 執筆:
e.g. Next.js の考え方 OSS: location-state
今日のテーマ: UI テスト二大疾病 過剰テスト中毒 エラーテスト欠乏症 単体テストにおける2 つの陥りやすいアンチパターンと、その対処法について
過剰テスト中毒 単体テスト初学者が最初に陥るアンチパターン
過剰テスト中毒とは 過剰テスト: テストとしての価値が低いもの 過剰テスト中毒: 過剰テストによってメンテ工数が増えてしまっている状態 テストとしての価値が低いものを排除することが重要 書けるテストをともかく書いてると、後々苦しくなってくる
過剰テストの例 ページコンポーネントの実装 function RootPage() { // ... return ( <div>
<h1>Hello, World</h1> ... <button type="submit"> 問い合わせ</button> </div> ); } export default HomePage;
過剰テストの例 あまりに自明なテストはバグを拾う確率が低い 過剰テストと考えられるテストケース test(" ページタイトルに'Hello, World' が存在すること", () => {
render(<RootPage />); expect( screen.getByRole("heading", { name: "Hello, World", }), ).toBeInTheDocument(); });
良いテストの例 form のsubmit 時処理のテストはバグを拾う確率が比較的高い ボタン押下時の挙動はアプリケーションにおいても重要性が高く、デグレする可能性も高い部類 test(" 問い合わせ完了後に完了画面へ遷移すること", () => {
// ... await user.click( screen.getByRole("button", { name: " 問い合わせ", }), ); expect(apiReq).toHaveBeenCalledTimes(1); expect(apiReq).toHaveBeenLastCalledWith({ // ... }); expect( await screen.findByRole("heading", { name: " 問い合わせが完了しました", }), ).toBeInTheDocument(); });
過剰テストを判断する審美眼 退行に対する保護 リファクタリングへの耐性 迅速なフィードバック 保守のしやすさ 良い単体テストとは、以下の4 つの指標によって判断することが可能
エラーテスト欠乏症 単体テスト初学者が見落としやすいテスト観点
エラーテスト欠乏症 エラーテスト: 通信の失敗などに代表される、エラー時UI に関するテスト エラーテスト欠乏症: エラーテストが一切ないもしくは足りてない状態 ユーザーにとってエラー時の挙動は当たり前品質の観点で重要 多くの人が正常系のテストを書くが、異常系のテストは抜けがち
エラーテストを含めたテスト観点 想定できるエラーを可能な限り網羅的にテストすることが重要 Todo アプリにおける更新画面のテスト観点例
エラーテストの例 Todo アプリにおける更新画面のテスト実装例 describe("Todo 取得通信でエラー", () => { test(" ネットワークエラー時、エラーメッセージが表示されること",
async () => { // Arrange const apiRequestCall = jest.fn(); server.use( http.get("/api/todos", (req, res, ctx) => { return apiRequestCall(HttpResponse.error()); }), ); // Act render(<TodoApp />); // Assert expect(await screen.findByRole("alert")).toHaveTextContent( " 通信エラーが発生しました。通信環境をご確認の上、再度お試しください。", ); expect(apiRequestCall).toHaveBeenCalledTimes(1); }); });
まとめ UI テスト二大疾病の根治療法
まとめ 過剰テスト中毒の対処: テストの価値を見極め、良いテストに絞って書くことを意識しましょう エラーテスト欠乏症の対処: エラーパターンを列挙して、網羅的にテストしましょう テスト初学者が陥りやすいアンチパターンを念頭に、良いテストを目指しましょう
End