みやちゃ
皆さんこんにちは、みやちゃです!
物理とプログラミングについて解説しています!
今回はRspecでモデルのテストを書いていきます!
まだRspecをインストールしていない方はこちらの記事をご覧ください!
こちらの記事で、「テストをするアプリケーションの作成」から「簡単なテストの実行」まで解説しているので、ぜひそちらからご覧ください!
こちらの記事でもUserモデルのテストを解説しています!
- メールアドレスカラムがなければ無効な状態である
- 重複したメールアドレスは無効である
Userモデルのテストを書けるようになります!
目次
テスト:メールアドレスカラムがなければ無効な状態である
前回の続きとして、早速テストを書いていきましょう。
今回のテストの内容は「メールアドレスカラムがなければ無効な状態である」です。
つまり、今回はUserモデルの作成に失敗するテストを書きます。
テストを書く上では、失敗するテストを書くのも重要になります。
spec/models/user_spec.rbファイルを開いて以下のように記述してください。
require 'rails_helper'
RSpec.describe User, type: :model do
it "is valid with a email and password" do
user = User.new(
email: "user1@user.com",
password: "user1pass",
)
expect(user).to be_valid
end
it "is invalid without an email" do
user = User.new(
email: nil,
password: "user1pass",
)
user.valid?
expect(user.errors[:email]).to include("can't be blank")
end
end
it "テストの名前" do
テストの内容(今回は、emailがnilの状態でUserを作成して、userという関数に代入している)
expect(予期する結果)
end
テストの名前は、「is invalid without an email」で、「emailが無ければ、無効である」という意味です。
見ての通り、Userをnewする際に、emailをnilにしています。
そこで「user.valid?」とすることで、エラーが出るようにしています。
expectのところでは、エラーの内容が「can't be blank」を含んでいるという内容です。
初見でも何が書いてあるかよくわかると思います。
何をテストしているのかわかるように書くのも重要です。
テストの実行
それではテストを実行してみます。
ターミナルを開いて、以下のコマンドを実行してください。
rspec_sample miyacha$ bin/rspec spec/models/user_spec.rb
上記の結果
Running via Spring preloader in process 96076
User
is valid with a email and password
is invalid without an email
Finished in 0.09089 seconds (files took 0.6189 seconds to load)
2 examples, 0 failures
上記のような結果が返ってきました。
テストが通ったみたいですね。
つまり、emailが無ければ、ちゃんとエラーになってくれるということがわかりました。
重複したメールアドレスは無効な状態である
今回のテストの内容は「重複したメールアドレスは無効な状態である」です。
今回もUserモデルの作成に失敗するテストを書きます。
同じメールアドレスではUserは作成できないかどうかをテストします。
spec/models/user_spec.rbファイルを開いて以下のように記述してください。
require 'rails_helper'
RSpec.describe User, type: :model do
it "is valid with a email and password" do
user = User.create(
email: "user1@user.com",
password: "user1pass",
)
expect(user).to be_valid
end
it "is invalid without an email" do
user = User.create(
email: nil,
password: "user1pass",
)
user.valid?
expect(user.errors[:email]).to include("can't be blank")
end
it "is invalid with a duplicate email address" do
User.create(
email: "user1@user.com",
password: "user1pass",
)
user = User.new(
email: "user1@user.com",
password: "user2pass",
)
user.valid?
expect(user.errors[:email]).to include("has already been taken")
end
end
it "テストの名前" do
テストの内容(今回は、一度Userをcreateして、emailが同じユーザーをuserという関数に代入している)
expect(予期する結果)
end
テストの名前は、「is invalid with a duplicate email address」で、「重複したemailは無効である」という意味です。
見ての通り、Userを最初にcreateしています。
そのあとに、同じemailのUserを作成してuserという関数に代入しています。
そこで「user.valid?」とすることで、エラーが出るようにしています。
expectのところでは、エラーの内容が「has already been taken」を含んでいるという内容です。
テストの実行
それではテストを実行してみます。
ターミナルを開いて、以下のコマンドを実行してください。
rspec_sample miyacha$ bin/rspec spec/models/user_spec.rb
上記の結果
Running via Spring preloader in process 96230
User
is valid with a email and password
is invalid without an email
is invalid with a duplicate email address
Finished in 0.0798 seconds (files took 0.5832 seconds to load)
3 examples, 0 failures
上記のような結果が返ってきました。
テストが通ったみたいですね。
つまり、重複したemailではUserモデルは作成できないということがわかりました。
まとめ
いかがでしたでしょうか?
今回は、Userモデルのテストを書きました。
次回は、Postモデルのテストを書いていきます!
みやちゃ
ここまでご覧いただきありがとうございます!
こちら のUdemyの動画教材は、8時間で、
- Dockerで仮想環境構築
- Railsの基礎を解説しながら、アプリケーション開発
- RSpecでテストを記述
まで解説しています。
Udemyの教材へRailsエンジニアとして働くために必要な、DockerとRSpecを同時に解説してくれています。
DockerとRSpecを使って作ったポートフォリオはかなり評価が高くなります。
ぜひ動画を見てみてはいかがでしょうか?
Udemyの教材へ受講生は、5000人以上!です。
さらに、Udemyは、30日間の返金保証付きなので、いつでも返金できます。