0Pricing
CSS Academy · レッスン

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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. ビジュアルリグレッションテストの概念
  2. Storybook向けPercyとChromatic
  3. JestによるCSSユニットテスト
  4. アクセシビリティテスト: color-contrastとfocus
← CSS Academyに戻る