2
0

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.

request specでDRYなコードを書きましょう

Last updated at Posted at 2021-06-07

はじめに

Rspecを書き始めたばかりなのであまり詳しいことはかけませんが自分の備忘録として書いているので間違えている部分等あれば教えていただけると幸いです。

#そもそもRequest specってなに?
もともとRailsのcontrollerをテストする際にはRails4までのバーションだとController specが用いられてましたがRails5以降になるとそれらが非推奨となりRequest specで書くことが推奨されるようになりました。

要するにcontollerに書くテストを書けばいい!!と私は思います
Railsガイドによるとコントローラの機能テストは

以下引用

Webリクエストが成功したか
正しいページにリダイレクトされたか
ユーザ認証が成功したか
レスポンスのテンプレートに正しいオブジェクトが保存されたか
ビューに表示されたメッセージは適切か

このようになっています。上記を参考にRequest specを書いていきましょう

本題

それでは上記を参考にDRYなコードを書いていきましょう!!

###待った!!DRYってなに!?!?
ってなった方もいると思います。僕もそうでした。
DRYというのはDRY原則と言ってWebフレームワークRuby on Railsが基本理念としの一つとして採用している開発原則です。簡単にいうとコードを重複させないという意味です。
難しい事はここでは省きますがrequest specを下記に書いていくのでそこで雰囲気だけ掴んでいってください!

###例1 HTTPレスポンスコードが200かどうかを判定する場合


require 'rails_helper'

Rspec.describe 'Qiita', type: :request do
  describe 'GET Qiita index' do
   it 'statusが200であること'
    get qiita_path
    expect(response).to have_http_status(200) 
   end
  end

 describe 'GET Qiita new' do
   it 'statusが200であること' do
    get new_qiita_path 
    expect(response).to have_http_status(200)
   end   
 end
end

例ですが上記のようなコードがあった場合、indexとnewで重複している場所があります。
このような場合にDRYに書くことができます。

DRYに書いた場合

require 'rails_helper'

shared_examples 'statusが200であること' do
  it 'statusが200であること' do
    expect(response).to have_http_status(200)
  end
end 

Rspec.describe 'Qiita', type: :request do
  describe 'GET Qiita index' do
    get qiita_path
    it_behaves_like 'statusが200であること' 
  end

 describe 'GET Qiita new' do
    get new_qiita_path 
    it_behaves_like 'statusが200であること'  
 end
end

これだけで圧倒的にみやすくなりました。ここででできたshared_examplesとit_behaves_likeは何かというとshared_examplesを利用してコードを共有しit_behaves_likeでそれを呼び出すと言ったものです。

詳しい説明は下記に記事を貼るのでそこから参照してください!

参考にした記事

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?