みやちゃ
皆さんこんにちは、みやちゃです!
今回は前回の記事の続きです!
こちらの記事はPart.10です!
Part.1から見れば、Railsアプリケーションの作成からRspec導入、テストの書き方の一連の流れを確かめられるので、ぜひご覧ください!
Part.3「Rails6にてRspecでUserモデルのテストの書き方」
Part.4「Rails6にてRspecでUserモデルのテストの書き方2」
Part.5「Rspecのテストで作成したデータベースはどうなるのか?」
Part.6「FactoryBot導入からデータベース作成まで」
Part.7「FactoryBotで複数のデータベースを一気に作成」
Part.8「Controllerのテストの書き方(request specの書き方)」
Part.9「Controllerのテストの書き方(request specの書き方)2」
目次
前回までの復習
それではcreateアクションのテストを書いていきましょう!
spec/models/posts_request.rbファイルを開いてください。
前回の記事まででは、以下のような内容になっています。
require 'rails_helper'
RSpec.describe "Posts", type: :request do
describe "[Action test]" do
before do
@user = FactoryBot.create(:user, :a)
end
context "new" do
it "access by user" do
sign_in @user
get '/posts/new'
expect(response).to be_successful
end
it "access by guest" do
get '/posts/new'
expect(response).to have_http_status(302)
end
end
it "show" do
post = Post.create(
title: "test",
body: "test",
user_id: "1",
)
get post_path(post)
expect(response).to be_successful
end
end
end
これにCreateアクションのテストを追加していきます。
テストの説明
Createアクションのテストは2つのexampleを作成します。
それぞれの内容は
・ログインしたユーザーでPostを作成できるか
・ログインしていないユーザーで適切な処理がされるか
です。
それでは順にやっていきましょう。
Createアクションのテスト
・ログインしたユーザーでPostを作成できるか
まずはログインしたユーザーでちゃんとPostが作成できるかをテストします。
「posts_request.rb」ファイルを開いて、以下の記述を追加してください。
context "create" do
it "access by user" do
sign_in @user
post "/posts", :params => { :post => { :title => "test", :body => "test", :user_id => 1}}
expect(response).to have_http_status(200)
end
end
sign_in @userでログインしています。
「post "/posts"」というURLでリクエストを通します。
その際に、パラメータとして、カラムの情報を与えてあげています。
そしてそれらの結果、「have_http_status(200)」でHTTPリクエストが200であるという予想を立てています。
HTTPリクエストが200は、リクエストが成功したことを示します。
・ログインしていないユーザーで適切な処理がされるか
次はログインしていないユーザー(ゲスト)がリクエストしたときのテストを書きましょう。
以下の記述を追加してください。
context "create" do
it "access by user" do
sign_in @user
post "/posts", :params => { :post => { :title => "test", :body => "test", :user_id => 1}}
expect(response).to have_http_status(200)
end
it "access by guest" do
post "/posts"
expect(response).to have_http_status(401)
end
end
今度は見ての通り、sign_in @userの記述が無くなっています。
ゲストの状態で、「post "/posts"」のリクエストをしてもエラーになるはずです。
HTTPリクエストの401は、未認証であることを示します。
テストの実行
それではテストを実行して見ましょう。
ターミナルを開いて、以下のコマンドを実行してください。
rspec_sample miyacha$ bin/rspec spec/requests/posts_request.rb
実行結果は、
Running via Spring preloader in process 5136
Posts
[Action test]
show
new
access by user
access by guest
create
access by user
access by guest
Finished in 0.40395 seconds (files took 0.56838 seconds to load)
5 examples, 0 failures
テストが通りましたね。
成功です。
まとめ
いかがでしたでしょうか?
今回は、Createアクションのテストを書きました!
みやちゃ
ここまでご覧いただきありがとうございます!
こちら のUdemyの動画教材は、8時間で、
- Dockerで仮想環境構築
- Railsの基礎を解説しながら、アプリケーション開発
- RSpecでテストを記述
まで解説しています。
Udemyの教材へRailsエンジニアとして働くために必要な、DockerとRSpecを同時に解説してくれています。
DockerとRSpecを使って作ったポートフォリオはかなり評価が高くなります。
ぜひ動画を見てみてはいかがでしょうか?
Udemyの教材へ受講生は、5000人以上!です。
さらに、Udemyは、30日間の返金保証付きなので、いつでも返金できます。