Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: Dropdown コンポーネントの E2E テストを単体テストで書き直す #4963

Merged
merged 8 commits into from
Oct 11, 2024

Conversation

s-sasaki-0529
Copy link
Contributor

関連URL

概要

Dropdown コンポーネントには E2E テストがありますが、単体テストで十分なテストであるため、単体テスト(testing-library) に移植します。

これによって、 CI で時間がかかっている E2E テストのコスト削減及び、暗黙に発生している Storybook への依存の削減、自動テスト全体のポリシー整備を行います。

変更内容

  • @testing-library/jest-dom を追加
  • E2E テスト側を削除
  • 同程度の内容の単体テストを実装

確認方法

テストコードのみなのでCIが通ればOKです。

備考

基本的にはすべての E2E テストを移植し、E2Eテスト基盤ごと一度削除し、Next.js を使用すると行った本質的に E2E テストが向いている場面用に作り直します。

今回は @testign-library/jest-dom の追加が混ざってるので Dropdown コンポーネントの移行だけでPRを作成してますが、今後は複数コンポーネントの対応を1PRにまとめるかもしれません。

@s-sasaki-0529 s-sasaki-0529 self-assigned this Sep 30, 2024
Copy link

pkg-pr-new bot commented Sep 30, 2024

Open in Stackblitz

pnpm add https://pkg.pr.new/kufu/smarthr-ui@4963

commit: 185a3e7

@@ -40,6 +40,7 @@
"@storybook/test-runner": "^0.19.1",
"@storybook/theming": "^8.3.4",
"@swc/core": "^1.7.26",
"@testing-library/jest-dom": "^6.5.0",
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Jest から Vitest に移行したばかりですが、Vitest の組み込みアサーションだとちょっと表現力不足というか、特にE2Eで見ていたようなチェックを簡易的に書くには表現力不足だったので @testing-library/jest-dom を追加しました。

これで、本PRでいう toHaveFocus() みたいな便利アサーションを利用できるようになります。
jest-dom ってパッケージ名ですが、vitest はじめ Jest 互換のあるテストフレームワークで使用可能です。

@@ -0,0 +1 @@
import '@testing-library/jest-dom/vitest'
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

この辺は以下の手順通りの対応。
https://github.com/testing-library/jest-dom#with-vitest

@@ -173,6 +173,9 @@ importers:
'@swc/core':
specifier: ^1.7.26
version: 1.7.26(@swc/[email protected])
'@testing-library/jest-dom':
specifier: ^6.5.0
version: 6.5.0
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

no dependencies で助かる。

@s-sasaki-0529 s-sasaki-0529 marked this pull request as ready for review September 30, 2024 01:12
@s-sasaki-0529 s-sasaki-0529 requested a review from a team as a code owner September 30, 2024 01:12
@s-sasaki-0529 s-sasaki-0529 requested review from oti, yt-ymmt, misako0927, Qs-F and hiroki0525 and removed request for a team September 30, 2024 01:12
it('トリガーボタンがクリックされるとドロップダウンが開くこと', () => {
render(template)

act(() => screen.getByText('Trigger').click())
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

すでに試されている気はするんですが、getByRoleだとうまくうごかなさそうでしたか?
optionでexpanded: falseとかを渡すとついでにアクセシビリティのテストにもなりそうで良いかな (複数の観点を1つのテストでやらないほうがいいはそれはそうなんですが)、と思って聞いてる感じです!

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

おぉ、getByRole のオプションで expanded 使えるのは知らなかったです!
可能な限り単体テスト内ではアクセシビリティの担保もしたいので修正します!

Copy link
Contributor

@Qs-F Qs-F left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

書き方違和感なかったので良い気がしたんですが1つだけ気になったのでコメントしてます!

)

act(() => screen.getByRole('button', { name: 'Trigger', expanded: false }).click())
act(() => screen.getByRole('button', { name: 'Open Dialog' }).click())
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(理解不足かもしれません)ドロップダウンからダイアログを開いたときフォーカスが移動することというテストなのでフォーカスがあるかどうかみるのかなと思ったのですがクリックだけでテストできていますでしょうか・・?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

全然大丈夫じゃないです!!

これE2Eから移植作業してる中で、ダイアログは Portal で外側に描画されるから testing-library でフォーカス確認するの無理では〜って一旦保留したまま忘れてコミット・プッシュしてました!

ので一旦再確認します 🙏

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

確認しました。

ダイアログが開いた際にダイアログ内の(任意の)要素にフォーカスを入れられるのは Dialog コンポーネントの機能であって、Dropdown は一切関与しないため、 Dialog の単体テストでカバーしようと思います!

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

承知しました!

@s-sasaki-0529 s-sasaki-0529 marked this pull request as draft October 8, 2024 00:20
@s-sasaki-0529 s-sasaki-0529 marked this pull request as ready for review October 8, 2024 00:28
@s-sasaki-0529 s-sasaki-0529 enabled auto-merge (squash) October 10, 2024 11:10
Copy link
Contributor

@Qs-F Qs-F left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

確認しました!良さそう!!

Copy link
Contributor

@misako0927 misako0927 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

良さそうです!

@s-sasaki-0529 s-sasaki-0529 merged commit a0df32d into master Oct 11, 2024
17 checks passed
@s-sasaki-0529 s-sasaki-0529 deleted the SHRUI-1053-sasaki2 branch October 11, 2024 03:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants