---
# System prepended metadata

title: 第2章　RSpec のセットアップ

---

# 第2章　RSpec のセットアップ

**この章の主な流れ**

- budnelを使ってRspecのインストール
- テスト用のデーターベースを作成
- テストしたい項目をテストできるようにRspecを設定
- 新しい機能を追加するとにテスト用のデータファイルを自動で生成できるようにアプリケーション側で設定

</br>

## 1.bundleインストールを行う
```ruby=
group :development, :test do
  gem 'rspec-rails'  #開発とテスト環境だけのインストール
end

bundle install
```
</br>

rspec-railsがやってくれること

- rspec-coreその他の独立した 必要なgemとかをインストールしてくれる 
- rails向けの便利な機能を提供してくれる

## 2.テスト用データベースの準備

config/database.yml ファイルの中身
```ruby=
test:
  <<: *default
  database: db/test.sqlite3

#MySQL や PostgreSQL を使っている場合
test:
  <<: *default
  database: projects_test

```

コードが見つからない場合はconfig/database.ymlに上記の記載を行いrake タスクを実行して接続可能なデータベースを作成を行う

```ruby=
bin/rails db:create:all
```

</br>

**rake タスクってなに？**

[railsガイド](https://railsguides.jp/rails_on_rack.html#%E5%8F%82%E8%80%83%E8%B3%87%E6%96%99:~:text=Rack%E3%81%AF%E3%80%81Ruby%E3%81%AEWeb%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AB%E5%AF%BE%E3%81%97%E3%81%A6%E3%80%81%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E5%8C%96%E3%81%95%E3%82%8C%E3%81%9F%E6%9C%80%E5%B0%8F%E9%99%90%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%95%E3%82%A7%E3%82%A4%E3%82%B9%E3%82%92%E6%8F%90%E4%BE%9B%E3%81%97%E3%81%A6%E3%80%81%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%95%E3%82%A7%E3%82%A4%E3%82%B9%E3%82%92%E5%BA%83%E7%AF%84%E5%9B%B2%E3%81%AB%E4%BD%BF%E3%81%88%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%97%E3%81%BE%E3%81%99%E3%80%82Rack%E3%81%AFHTTP%E3%83%AA%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88%E3%81%A8%E3%83%AC%E3%82%B9%E3%83%9D%E3%83%B3%E3%82%B9%E3%82%92%E5%8F%AF%E8%83%BD%E3%81%AA%E3%81%8B%E3%81%8E%E3%82%8A%E7%B0%A1%E5%8D%98%E3%81%AA%E6%96%B9%E6%B3%95%E3%81%A7%E3%83%A9%E3%83%83%E3%83%94%E3%83%B3%E3%82%B0%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%81%A7%E3%80%81Web%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%80%81Web%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF%E3%80%81%E3%81%9D%E3%81%AE%E9%96%93%E3%81%AB%E4%BD%8D%E7%BD%AE%E3%81%99%E3%82%8B%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%EF%BC%88%E3%83%9F%E3%83%89%E3%83%AB%E3%82%A6%E3%82%A7%E3%82%A2%E3%81%A8%E5%91%BC%E3%81%B0%E3%82%8C%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%EF%BC%89%E3%81%AEAPI%E3%82%921%E3%81%A4%E3%81%AE%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%97%E3%81%AE%E5%BD%A2%E3%81%AB%E3%81%BE%E3%81%A8%E3%82%81%E3%81%BE%E3%81%99%E3%80%82)

>Rackは、RubyのWebアプリケーションに対して、モジュール化された最小限のインターフェイスを提供して、インターフェイスを広範囲に使えるようにします。RackはHTTPリクエストとレスポンスを可能なかぎり簡単な方法でラッピングすることで、Webサーバー、Webフレームワーク、その間に位置するソフトウェア（ミドルウェアと呼ばれています）のAPIを1つのメソッド呼び出しの形にまとめます。

</br>

[rakeタスクわかりやすく](https://zenn.dev/yusuke_docha/articles/2d2cfd1030f6ac#whenever%E3%81%A7%E5%AE%9A%E6%9C%9F%E7%9A%84%E3%81%AA%E5%87%A6%E7%90%86%E3%82%92%E8%A1%8C%E3%81%86)
>Railsで定期的に実行したい処理をRubyコードでタスクとして定義しておき､必要なときに呼び出して実行することができる機能
特徴としてアプリケーションを起動せずにターミナル上で実行でき､サーバを起動せずに定義した処理を実行できる

バックラウンドでタスクの実行にはwheneverというgemを使用する。

</br>


**db:create:allコマンド**
database.ymlに定義してあるデータベースを全て作成
[qiitaより](https://qiita.com/parsetree/items/e9b08c6b11f762b949de)

 逆にすべての環境のDPを削除したい時
 
```ruby=
rake db:drop:all
```
 
## 3.RSpec の設定
 
Rspecファイル群のインストール
```ruby=
bin/rails generate rspec:install


create .rspec
create spec
create spec/spec_helper.rb
create spec/rails_helper.rb
```

生成されるファイル
- .rspec
  設定ファイル
  ```ruby=
  --format documentation
  ```
  **--format documentation**
  テスト結果の出力を変える
  
  ```ruby=
  #format documentation記載なし
  .....
  Finished in 0.40011 seconds (files took 4.53 seconds to load)
  5 examples, 0 failures

  #format documentation記載あり
  　Post
  バリデーションの確認
    titalカラム
      タイトルが空または３文字以内の場合postが作成されないこと
      タイトルが30文字以上の場合はpostが作成されないこと
    日付に関するバリデーション
      開始日が今日より過去の場合postが作成されないこと
      終了日が開始日より過去の場合postが作成されない事
    memoカラム
      メモが30文字以上の場合はpostが作成されないこと

  Finished in 0.25123 seconds (files took 2 seconds to load)
  5 examples, 0 failures
  ```
  どのテストで？？どこのテストが通ったのかがわかりやすい
  
- spec_helper.rb、rails_helper.rb
  テストで使用する設定ファイルの記載を行う場所

インストールができている場合
```ruby=
bundle exec rspec
No examples found.

Finished in 0.00047 seconds (files took 0.11704 seconds to load)
0 examples, 0 failures
```

**binstubを使ってコマンドを短くすることができる。**

何かしらのRailsアプリケーションを実行するときはbundleを使用が必須であり実行コマンドがどうしても長くなってしまうRspecの場合はbudle exec rpsecになる
少しでもコマンドを短くする方法として<span style="color: red; ">binstub</span>コマンドを使用する。

インストール後、RubyGems は実行可能ファイルと共に以下のものを用意してくれる

```ruby=
bundle binstubs rspec-core

コマンド実行後

↓↓↓↓

#コマンド実行可能
bin/rspec

#binディレクトリー内にrsepcの実行ファイルが生成される。

bin/
├── bundle
├── importmap
├── rails
├── rake
├── rspec #作成される
└── setup
```

[binstubについて](https://qiita.com/tanaka51/items/bc22c1c364202d3cce4e)


## 4.ジェネレーターの設定について

Rspecを導入済みなのでジェネレーターのコマンドを使用してもminitestのファイルは作成されない代わりに、Rspecのファイルがspecディレクトリーに作成されて不必要なファイルも作成されてしまうここでは最初から作られないようにどのファイルを作成しないかを決めることができる。

falseを記載すれば作られない
config/application.rb
```ruby=
  class Application < Rails::Application
    # Initialize configuration defaults for originally generated Rails version.
    config.load_defaults 7.0
    config.generators do |g|
      g.test_framework :rspec,
                       fixtures: false,
                       view_specs: false,
    end
  end

```

テスト以外のファイルについて

ヘルパー、jsなどいらないファイル名の記載することがで
作成をスキップすることができる。
```
config.generators do |g|
  g.stylesheets false
  g.javascripts false
  g.helper false
```