JestによるCSSユニットテスト
Jestと関連マッチャーを使って、CSS-in-JSの出力をテストし、スタイル付きコンポーネントをスナップショットテストします。
「JestによるCSSユニットテスト」はCoddyKit上の無料CSS Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCSS Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 CSS Academyコースには全4レッスンが含まれています。
JestでCSSをテストする理由
CSSのユニットテストでは、計算済みスタイル、クラスの適用、レイアウトの動作をプログラムで検証します。ブラウザのスクリーンショットや手動による目視確認を必要とせず、CSSロジックのリグレッション(誤ったクラスの適用やモディファイアの欠落など)を検出できます。
JSDOMとCSSのサポート
JestはデフォルトでJSDOMを使用しますが、CSSのサポートは限定的です。レイアウトの計算や複雑なセレクターの評価は行いません。基本的なクラスの存在確認やインラインスタイルのテストにはJSDOMで十分ですが、計算済みプロパティをテストする場合は、CSSモジュールのモックとともにjest-environment-jsdomを使用してください。
クラスの適用をテストする
コンポーネントをレンダリングし、propsまたはstateに基づいて正しいCSSクラスが適用されていることをアサートします。これにより、具体的なスタイル値をアサートしなくても、条件付きクラスのロジック(active、disabled、error variant)が正しく機能することを検証できます。
<button class="btn-primary">Primary Button</button>
テストにおけるCSS Modules
Jestはidentity-obj-proxyを使ってCSS Moduleのインポートを変換します。このプロキシは、アクセスされたプロパティに対してクラス名の文字列を返します。styles.primaryは"primary"を返します。実際のCSSを適用しなくても、テストでクラス名をアサートできます。
jest-styled-components
Styled Componentsのプロジェクトでは、jest-styled-componentsによってtoHaveStyleRuleマッチャーが追加されます。実際のブラウザでスタイルを計算しなくても、propsに基づいてstyled componentが正しいCSSプロパティ値を適用することをテストできます。
<button class="btn">Enabled</button>
<button class="btn" disabled>Disabled (0.5 opacity)</button>
@testing-library/jest-dom
jest-domは、DOM固有のマッチャーでJestを拡張します。toHaveStyle(インラインまたは計算済みのスタイルを確認)、toHaveClass(クラスリストを確認)、toBeVisible(display、visibility、opacityを確認)などがあります。これらにより、CSSのアサーションを読みやすく、表現力豊かに記述できます。
クラス名のスナップショットテスト
コンポーネントのスナップショットには、クラス名を含むレンダリング済みマークアップが記録されます。CSS Moduleの名前変更や条件付きクラスのロジック変更は、スナップショットの差分として現れます。意図しないクラス変更をすばやく検出するのに便利ですが、スナップショットを慎重にレビューする習慣が必要です。
JestによるCSSテストの制限
Jestでは、レイアウトの計算(offsetWidth、getBoundingClientRect)、メディアクエリの評価、CSSアニメーションの実行はできません。これらにはPlaywrightやCypressによる実際のブラウザ環境が必要です。JestのCSSテストは、ブラウザベースのテストを置き換えるものではなく、補完するものです。
CSSカスタムプロパティのテスト
テストでコンテナ要素にCSSカスタムプロパティを設定します。element.style.setProperty("--color-primary", "red")。getComputedStyle(el).getPropertyValue("--color-primary")で計算済みの値を読み取ります。JSDOMはカスタムプロパティの読み取りをサポートしていますが、カスケードには対応していません。
アニメーションクラスのテスト
アニメーションを開始するクラスが適切なタイミングで追加・削除されることを検証します。モーダルコンポーネントを開いたときにanimate-enterクラスが追加され、アンマウント前にanimate-exitクラスが追加されることをテストします。アニメーションのCSS自体はVRTでテストします。
CSSロジックのカバレッジ
CSSロジックはJavaScriptに存在します。たとえば、条件付きクラス文字列、テーマプロバイダーの値、スタイルオブジェクトの生成などです。Jestのカバレッジ(Istanbul)で、このJavaScriptによるCSSロジックをカバーできます。すべての分岐をカバーするテストを作成し、すべてのバリエーションと状態の組み合わせを実行してください。
理解度チェック
JestでCSS Modulesとともに使用した場合、identity-obj-proxyは何をしますか。
概要
JestによるCSSユニットテストでは、実際のブラウザを使わずに、クラス適用のロジック、条件付きスタイル、CSS Moduleの動作を検証できます。CSS Modulesにはidentity-obj-proxy、Styled Componentsにはjest-styled-components、読みやすいアサーションにはjest-domのマッチャーを使用してください。VRTと組み合わせることで、CSSの品質を包括的にカバーできます。
よくある質問
「JestによるCSSユニットテスト」レッスンは無料ですか?
はい。「JestによるCSSユニットテスト」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、CSS Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 CSS Academyコースには全4レッスンが含まれています。
「JestによるCSSユニットテスト」で何を学びますか?
Jestと関連マッチャーを使って、CSS-in-JSの出力をテストし、スタイル付きコンポーネントをスナップショットテストします。 ブラウザで直接実行するハンズオンコードでCSS Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
CSS Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCSS Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「JestによるCSSユニットテスト」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCSS Academyレッスンでコードを書いて実行できますか?
はい。すべてのCSS Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。