前提・実現したいこと
devise使用しないWebアプリ実装した場合のRSpecによるテストコードの書き方
controllerとviewの書き方が知りたいです。
deviseを使用せずにログイン認証があるWebアプリを実装しました。
RSpecでテストコード書くのは初めてなので調べてやってみたのですが、上記に該当するテストコードが見つからなかったのでどう書けばいいのかわかりません。
どなたか参考になるテストコードありましたら教えていただきたいです。
deviseで実装したことがまだないですが最悪、deviseで書き直すという選択肢も入れてきています。
エラーコード
例えば、UsersContollerのshowアクションのテストコードを書く場合、ログインが確認できないためshowアクションを実行することができません。
Users #show responds successfully (FAILED - 1) returns a 200 response (FAILED - 2) Failures: 1) Users #show responds successfully Failure/Error: get :show, params: {id: @user.id} URI::InvalidURIError: bad URI(is not URI?): "http://www.example.com:80show" # /home/ubuntu/.rvm/gems/ruby-3.0.0/gems/rack-test-1.1.0/lib/rack/test.rb:214:in `parse_uri' # /home/ubuntu/.rvm/gems/ruby-3.0.0/gems/rack-test-1.1.0/lib/rack/test.rb:117:in `request' # /home/ubuntu/.rvm/gems/ruby-3.0.0/gems/rails-controller-testing-1.0.5/lib/rails/controller/testing/integration.rb:16:in `block (2 levels) in <module:Integration>' # ./spec/requests/users_request_spec.rb:11:in `block (3 levels) in <top (required)>' 2) Users #show returns a 200 response Failure/Error: get :show, params: {id: @user.id} URI::InvalidURIError: bad URI(is not URI?): "http://www.example.com:80show" # /home/ubuntu/.rvm/gems/ruby-3.0.0/gems/rack-test-1.1.0/lib/rack/test.rb:214:in `parse_uri' # /home/ubuntu/.rvm/gems/ruby-3.0.0/gems/rack-test-1.1.0/lib/rack/test.rb:117:in `request' # /home/ubuntu/.rvm/gems/ruby-3.0.0/gems/rails-controller-testing-1.0.5/lib/rails/controller/testing/integration.rb:16:in `block (2 levels) in <module:Integration>' # ./spec/requests/users_request_spec.rb:16:in `block (3 levels) in <top (required)>' Finished in 0.05534 seconds (files took 1.03 seconds to load) 2 examples, 2 failures Failed examples: rspec ./spec/requests/users_request_spec.rb:10 # Users #show responds successfully rspec ./spec/requests/users_request_spec.rb:15 # Users #show returns a 200 response
該当のソースコード
users_requrest_spec.rb
require 'rails_helper' RSpec.describe "Users", type: :request do before do @user = User.create(name: "user", email: "user@example.com", password: "password", password_confirmation: "password") end describe "#show" do # 正常なレスポンスか? it "responds successfully" do get :show, params: {id: @user.id} expect(response).to be_success end # 200レスポンスが返ってきているか? it "returns a 200 response" do get :show, params: {id: @user.id} expect(response).to have_http_status "200" end end end
routes.rb
Rails.application.routes.draw do root to: 'toppages#index' resources :restaurants, only: [:index, :show] do resources :posts, only: [:create, :destroy] end get '/login', to: 'sessions#new' post '/login', to: 'sessions#create' delete '/logout', to: 'sessions#destroy' post 'guest_login', to: 'guest_sessions#create' get 'signup', to: 'users#new' resources :users, only: [:index, :show, :create] do member do get :likes end end resources :likes, only: [:create, :destroy] resources :posts, only: [:create, :destroy] end
補足情報(FW/ツールのバージョンなど)
Ruby 3.0.0
Ruby on Rails 6.1.3.1
gem 'rspec-rails', '~> 4.0.1'
あなたの回答
tips
プレビュー