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
結合テスト (インテグレーションテスト)
概要
例
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です♪
こちらのリンクを経由すると1万円引きになります。
RUNTEQを通じて開発学習の末、受託開発企業をご紹介いただき、現在も双方とご縁があります。
もし、興味がありましたらお気軽にコメントか、TwitterのDMでお声掛けください。