Yanonoblog!

こつこつと

RSpecによるテストの種類とその特徴

はじめに

本記事では、RSpecのテストの種類とその特徴についてまとめています。

単体テスト (ユニットテスト)

  • 1つのクラスやメソッドが正しく動作するかを確認するテスト。
  • テストの実行速度が速い。

# spec/models/fruit_spec.rb
RSpec.describe Fruit, type: :model do
  it "名前が存在する場合、有効である" do
    fruit = Fruit.new(name: "apple")
    expect(fruit).to be_valid
  end
end

結合テスト (インテグレーションテスト)

概要

  • 複数のコンポーネントや機能が連携して正しく動作するかを確認するテスト。
  • APIのレスポンスや、特定の画面の動作をテストすることが多い。

rubyCopy code
# spec/requests/shop_spec.rb
RSpec.describe "Shop Management", type: :request do
  it "店舗情報を取得する" do
    get shop_path(id: 1)
    expect(response.status).to eq 200
  end
end

システムテスト

概要

  • ユーザーの操作を模倣して、アプリケーション全体が正しく動作するかを確認するテスト。
  • Capybaraなどの外部ライブラリを使用してブラウザ上での操作をシミュレートする。

rubyCopy code
# spec/system/order_spec.rb
RSpec.describe "Order Process", type: :system do
  it "商品をカートに追加して注文する" do
    visit item_path(id: 1)
    click_on "カートに追加"
    click_on "注文を確定する"
    expect(page).to have_content "注文が完了しました"
  end
end

その他のテスト

  • Viewテスト: ビューの表示内容をテストする。
  • Helperテスト: ヘルパーメソッドの動作をテストする。
  • Routingテスト: ルーティングの設定をテストする。
  • Jobテスト: バックグラウンドジョブの動作をテストする。
  • Mailerテスト: メール送信の動作をテストする。

ディレクトリ構造例

RSpecでのテストのディレクトリ構造は、テストの種類に応じて整理されています。

以下は、上記で紹介されたテストの種類に基づくディレクトリ構造とその解説です。

spec/
│
├── models/               # モデルのテストを配置するディレクトリ
│   ├── fruit_spec.rb    # Fruitモデルのテスト
│   └── ...
│
├── requests/            # APIのレスポンスや特定の画面の動作など、複数のコンポーネントが連携して動作する部分の結合テストを配置するディレクトリ
│   ├── shop_spec.rb     # Shopに関する結合テスト
│   └── ...
│
├── system/              # ユーザーの操作を模倣して、アプリケーション全体の動作を確認するシステムテストを配置するディレクトリ
│   ├── order_spec.rb    # Orderに関するシステムテスト
│   └── ...
│
├── views/               # ビューの表示内容やレイアウトなど、ビューの表示に関するテストを配置するディレクトリ
│   └── ...
│
├── helpers/             # ヘルパーメソッドの返り値や動作に関するテストを配置するディレクトリ
│   └── ...
│
├── routing/             # ルートの解決やリダイレクトなどのルーティングテストを配置するディレクトリ
│   └── ...
│
├── jobs/                # ジョブの実行や結果などのバックグラウンドジョブのテストを配置するディレクトリ
│   └── ...
│
└── mailers/             # メールの送信や内容などのメーラーのテストを配置するディレクトリ
    └── ...

おしまい

コメント

本記事の内容は以上になります!


プログラミングスクールのご紹介 (卒業生より)

お世話になったプログラミングスクールであるRUNTEQです♪

https://runteq.jp/r/ohtFwbjW

こちらのリンクを経由すると1万円引きになります。

RUNTEQを通じて開発学習の末、受託開発企業をご紹介いただき、現在も双方とご縁があります。

もし、興味がありましたらお気軽にコメントか、TwitterのDMでお声掛けください。

https://twitter.com/outputky