2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

最低限覚えておきたいRSpecの基本構成

Posted at

今までRSpecに関する記事を複数書いてきましたが、RSpecの基本構成に関する記事を上げてなかったので、今回はかんたんにまとめていきます。

かなり初歩的な内容になりますので、RSpecの基本的な部分が分かっている方は、他の記事をご覧ください。
[Rails]RSpecでテストを行う準備(FactoryBot使用)
[Rails]RSpecでモデルのテスト(FactoryBot使用)
[Rails]RSpecでよく使うマッチャー10選
[RSpec]request specでcontrollerテストをやってみる

#RSpecの構成

それではさっそく、RSpecの構成について説明していきます。

RSpecでは、テストしたい項目を入れ子構造で、分類していきます。
入れ子構造にすることで、テストを実行した際にどこでエラーが出ているかがすぐにわかるので、便利ですし、テストコードを書いている際もどこのテストをしているのかわかりやすいです。

構成の部分で使用されるものは下記です。

  • describe (テストの1番おおきいくくり  :必須)
  • context (describeをさらに細分化する場合にのみ使用)
  • it (具体的なテストをここで実施します :必須)
  • before (itの前に実行したい項目がある場合にのみ使用)

describeitが必須でそれ以外は状況に合わせて使用していきます。

#四則演算の例

では、四則演算を例にコードを記述していきます。

####describe

まず、describeは1番大きいくくりなので、四則演算を入れていきます。

describe '四則演算' do
  # この中にいろいろと入れていく
end

####context

四則演算という大きなくくりができたので、足し算、引き算といくくりでさらに細分化したいので、contextを使っていきます。

describe '四則演算' do
  # 足し算に関するテスト
  context '足し算' do
    # テストはこの中で実施
  end
  # 引き算に関するテスト
  context '引き算' do
    # テストはこの中で実施
  end
end

####it

では、足し算と引き算という項目まで細分化できたので、足し算と引き算に関する具体的なテストをitで記述していきます。

describe '四則演算' do
  context '足し算' do
    it '1 + 1は2になるか' do
      # エクスペクテーションとマッチャーを使ってテストコード記述
      expect(1 + 1).to eq 2
    end
    it '100 + 1は101になるか' do
      # エクスペクテーションとマッチャーを使ってテストコード記述
      expect(100 + 1).to eq 101
    end
  end
  context '引き算' do
    it '7 - 5は2になるか' do
      # エクスペクテーションとマッチャーを使ってテストコード記述
      expect(7 - 5).to eq 2
    end
  end
end

このような入れ子構造がRSpecの基本構造です。
足し算というくくりの中に何個でもitを入れていくことが可能です。

エクスペクテーションとマッチャーってなんやねんって方はこちらどうぞ!
[Rails]RSpecでよく使うマッチャー10選

#before

beforeの説明がまだだったので、beforeに関しても触れておきます。
itの前に実行したいことがあれば、記述していきます。

テストしたいページに移動やサインインがよく使われます。
そのページに遷移することで、そのページでのテストが実行できます。

describe 'トップ画面のテスト' do
    # itが実行される前にroot_pathに移動しています。
    before do
      visit root_path
    end

    context "表示の確認" do
      it "top画面に投稿一覧へのリンクが表示されているか" do
        expect(page).to have_link "", href: posts_path
      end
      it "root_pathが / であるか" do
        expect(current_path).to eq('/')
      end
    end
  end

#まとめ

RSpecの構成

  • describe (テストの1番おおきいくくり  :必須)
  • context (describeをさらに細分化する場合にのみ使用)
  • it (具体的なテストをここで実施します :必須)
  • before (itの前に実行したい項目がある場合にのみ使用)

今回は超初歩的なことをまとめてみました。

RSpecのコードをよくわからず、コピペしていた方などの参考になれば幸いです。

2
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?