Slide 1

Slide 1 text

React Testing Library の Query に ついて整理してみた 2022.01.27 フロントエンドLT Vol.1 【オンライン】 @takfjp

Slide 2

Slide 2 text

自己紹介 Takeru Furuichi (@takfjp) コネヒト株式会社 所属 「ママリ」という出産・育児領域のサービスを開発・運営してい ます フロント: React バックエンド: CakePHP

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

みなさんフロントエンドのテスト 書いてますか?

Slide 5

Slide 5 text

使っているテストツールは? Jest / testing-library / cypress etc...

Slide 6

Slide 6 text

今回は Testing Library のクエリの 使用方法についてまとめてみました

Slide 7

Slide 7 text

testing-library で要素を get する方法 screen.getByXXX -> で要素の有無を判定

Slide 8

Slide 8 text

使い始めの頃 test-id で要素を get するの楽ちん expect(screen.getByTestId('Hoge')).toBeInTheDocument() 全部これ使えばええやん!

Slide 9

Slide 9 text

そう思っていた時期がありました

Slide 10

Slide 10 text

しかし、優先順位が決められている

Slide 11

Slide 11 text

Queries Accessible to Everyone getByRole ARIA で定められたRole に基づいて要素を特定する Role はHTML 要素(DOM) に結びついているため、目視できるText などよりも確実に要素を取得することに適している アクセシビリティの観点から、全てのユーザーがアクセスできる ように定められているので使用時の優先度が高い button, checkbox, option など getByRole('button', {name: /submit/i}) [submit] というボタンを見つけることができる

Slide 12

Slide 12 text

こんな場合でも使える

Hello

World

screen.getByText('Hello World') -> NG screen.getByRole('heading', {name: 'Hello World'}) -> OK

Slide 13

Slide 13 text

Queries Accessible to Everyone 2 getByLabelText フォームフィールドをGet するときに適している。 ユーザーはラベルテキストを頼りにWeb サイトのフォームの要素 を見つけるため、フォームの要素をGet するときに優先されるべ き、とある getByPlaceholderText Label の代わりにはならないが、Placeholder が用意されているな ら特定に使う要素に優先した方がよい

Slide 14

Slide 14 text

getByText

などRole を持たない要素の中身を取得したい ときに使う Button に書いてある文言が上記のタグとかぶっていない時にも使 える getByDisplayValue input 要素内に入力されたテキストをGet する時に使う

Slide 15

Slide 15 text

Semantic Queries HTML5 およびARIA 準拠のセレクター getByAltText img, area, input など alt 属性が付与可能な要素を取り出す時に使 用できる 特に img に対して使う頻度が多いのでは? getByTitle SVG の中に埋め込まれたタイトル要素を使う時に重宝する

Slide 16

Slide 16 text

test-id (getByTestId) getByRole, getByText など用意された手段が全て使えない時の最終 手段 test のためだけに用意された属性であり、セマンティクスの重要性 が低いため濫用することは推奨されていない Role やText で一致できない場合 =

タグなどで必ず出現するが、 中身のテキストが動的で常に特定しづらい場合

{result.text}

Slide 17

Slide 17 text

雑感 フロントエンドテストを書く時はDOM のセマンティクスやアクセ シビリティも意識して書いていきたい しかし確実に要素の有無を判定したいシチュエーションはまだまだ ある 優先度順に試しつつ適宜 test-id もうまく使っていきたい

Slide 18

Slide 18 text

We're Hiring! https://connehito.com/recruit/

Slide 19

Slide 19 text

Thank you!

Slide 20

Slide 20 text

No content