スポンサーリンク

Windows10+WSL2でEveryday Rails – RSpecによるRailsテスト入門(Rails7.0版)を写経してみる(3)モデルスペック

2022年3月5日

Everyday Rails – RSpecによるRailsテスト入門(2022年版 23USドル)を写経してみる第3回。やっと、rspecのコードを書くことになりそうです。今回は、以下の続きです。

スポンサーリンク

Windows10+WSL2でEveryday Rails – RSpecによるRailsテスト入門(Rails 7.0)を写経してみる 目次

  1. (1)サンプルアプリケーションのセットアップ【2022年2月時点】
  2. (2)RSpecのセットアップ
  3. (3)モデルスペック

開発環境

Windows 10 Pro 21H1
Hyper-Vを有効化
VisualStudioCode (wsl用の拡張機能インストール済み)

WSL2 Ubuntu 20.04 LTS
rbenv
ruby 3.1
nvm
node.js LTS最新版
yarn
sqlite3
google-chrome-stable

モデルスペックを作成する

ターミナルでrails g rspecコマンドで、モデルスペックファイルを作成します

bin/rails g rspec:model user

spec/models/user_spec.rb ファイルが作成されました。次に、テストを実行します。

bundle exec rspec

結構待ちます。30秒くらいでしょうか。rspecは条件によっては遅いとどこかで見たような気がしますが、今のところ、Minitestと比べてかなり時間がかかる印象です。

次に、がんばって、spec/models/user_rspec.rbの下の方を以下のように書き換えます。

RSpec.describe User, type: :model do
  # 姓、名、メール、パスワードがあれば有効な状態であること
  it "is valid with a first name, last name, email, and password"

  # 名が無ければ無効な状態であること
  it "is invalid without a first name"

  # 姓が無ければ無効な状態であること
  it "is invalid without a last name"

  # メールアドレスが無ければ無効な状態であること
  it "is invalid without a email address"
  
  # 重複したメールアドレスなら無効状態であること
  it "is invalid with a duplicate email address"

  # ユーザーのフルネームを文字列として返すこと
  it "returns a user's full name as a string"
end

この状態でテストを実行

bundle exec rspec

6個のテストがpendingとなりました。これから、テストのコードを書いていきます。

RSpecの構文

以下のような構文だそうです。

expect()メソッド

を用いるとのことです。

# 2と1を加えると3になること
it "adds 2 and 1 to make 3" do
  expect(2 + 1).to eq 3
end

今回は、spec/models/user_spec.rb の最初のテストコードの部分を以下に書き換えます。

be_valid の部分を、

マッチャ

と呼ぶそうです。変な名前ですね。

  # 姓、名、メール、パスワードがあれば有効な状態であること
  it "is valid with a first name, last name, email, and password" do
    user = User.new(
      first_name: "Aaron",
      last_name:  "Summer",
      email:      "tester@example.com",
      password:   "dottle-nouveau-pavilion-tights-furze",
    )
    expect(user).to be_valid
  end

(変更前)

(変更後)

テストの実行

bundle exec rspec

これで最初のテストがpass(GREEN)して、ほっと一息です。RSpecのHelloWorldまでにずいぶん時間がかかりました。。。

次に、2個目のテストコードを書いていきます。ひたすら、 Everyday Rails – RSpecによるRailsテスト入門第3章を写経してきます。

bundle exec rspec

テストが2つパス(GREEN)しました。

テストがfailするように、以下のように、to を to_not に変更してから、テストを実行(bundle exec rspec)してます。

予想通り、testがfailしました。

今度は、先ほどのto_not を to に戻したのち、app/models/user.rb を以下のように変更します。(first_nameのvalidationをコメントアウト)

bundle exec rspec

このコメントアウトは戻しておきます。

どんどん、テストを写経していきます。

bundle exec rspec

すると、1個failしました。

include()の中身を打ち間違えて、スペースを入れ忘れていました。ここを訂正して、もう一度bundle exec rspecすると、以下のよう、ちゃんと5個passしています。

疲れたので、続きはまた今度、、、

作成中

Rails,Rails7

Posted by twosquirrel