2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

RSpecで共通のテストを再利用!shared_examplesとinclude_examplesの使い方

Last updated at Posted at 2024-11-13

1. はじめに

RSpecでテストを書いていると、似たようなテストケースが何度も出てきて「コードが重複してしまう…」と感じたことはありませんか?そんなときに便利なのが shared_examples と include_examples です。この2つを使うと、共通のテストケースを1か所にまとめて複数のテストで再利用できるようになります。
今回は、shared_examplesとinclude_examplesの使い方を紹介します!

2. shared_examplesとinclude_examplesとは?

shared_examples : 共通のテストケース(例)を定義するための機能。
include_examples : 定義した共通のテストケースをテストで呼び出すための機能。
この2つを使うことで、同じようなテストをいちいち書き直さずに、再利用できるようになります!

基本の使い方

例えば、あるAPIが200のステータスコードでJSON形式のレスポンスを返すかを確認するテストを書いたとします。

describe SomeController, type: :controller do
  before { get :index }
  it "returns a 200 status code" do
    expect(response.status).to eq(200)
  end
  it "returns the correct content type" do
    expect(response.content_type).to eq("application/json")
  end
end

ここでは、2つのテスト (it "returns a 200 status code" と it "returns the correct content type") を書いていますが、他のエンドポイントでも同じようなテストが必要な場合、毎回同じコードを書くことになり面倒です。
そこで、shared_examplesを使って、共通のテストケースを定義してみましょう!

3. shared_examplesを使った共通テストの定義

まずは、共通のテストケースをshared_examplesで定義します。

shared_examples "a successful response" do
  it "returns a 200 status code" do
    expect(response.status).to eq(200)
  end
  it "returns the correct content type" do
    expect(response.content_type).to eq("application/json")
  end
end

shared_examplesを使って "a successful response" という名前で共通のテストケースを定義しました。この中に「ステータスコードが200であること」と「レスポンスの形式がJSONであること」を確認するテストが含まれています。

4. include_examplesで共通テストを使う

次に、テスト内でinclude_examplesを使って、この共通テストケースを呼び出してみましょう。

describe SomeController, type: :controller do
  before { get :index }
  # 共通テストケースを呼び出し
  include_examples "a successful response"
end

include_examples "a successful response"と書くだけで、先ほど定義した共通のテストケースが実行されます。これで、重複したテストコードを書く必要がなくなり、テストがすっきりします!

まとめ

shared_examplesとinclude_examplesを使えば、同じようなテストを何度も書く必要がなくなり、テストコードがシンプルになります。特に、異なる条件で同じチェックを行う場合や、共通のレスポンスを確認するテストを書くときに便利です。
RSpecのテストが増えてきてコードが重複しているなと感じたら、ぜひこの方法を試してみてください。テストがすっきりするだけでなく、メンテナンスも楽になると思います。!

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?