Open takanori-matsushita opened 4 years ago
リスト 5.28: StaticPagesで扱う新しい名前付きルートに対するテスト green spec/requests/static_pages_request_spec.rb
require 'rails_helper'
RSpec.describe "StaticPages", type: :request do
before do
@base_title = "Ruby on Rails Tutorial Sample App"
end
describe "GET root" do
it "returns http success" do
get api_v1_root_path
expect(response).to have_http_status(:success)
json = JSON.parse(response.body)
expect(json['title']).to eq("#{@base_title}")
end
end
describe "GET /help" do
it "returns http success" do
get api_v1_help_path
expect(response).to have_http_status(:success)
json = JSON.parse(response.body)
expect(json['title']).to eq("Help | #{@base_title}")
end
end
describe "GET /about" do
it "returns http success" do
get api_v1_about_path
expect(response).to have_http_status(:success)
json = JSON.parse(response.body)
expect(json['title']).to eq("About | #{@base_title}")
end
end
describe "GET /contact" do
it "returns http success" do
get api_v1_contact_path
expect(response).to have_http_status(:success)
json = JSON.parse(response.body)
expect(json['title']).to eq("Contact | #{@base_title}")
end
end
end
ユーザー登録・ログイン関連はdeviseを使って実装する。 Gemfile
gem devise
deviseのインストール
docker-compose run web bundle install
docker-compose run web rails g devise:install
deviseのインストールができたら、表示される4つの設定を説明どおりに手動でファイルを編集する必要がある。
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
2, 4は一旦省略。3は今回はAPIモードのため不要
userモデルの作成
docker-compose run web rails g devise user
usersコントローラの作成
docker-compose run web rails g devise:controllers api/v1/users
ルーティングがnamespaceの中に入っていないので修正
ログイン関連のルーティングはnamespaceの外で良さそう
config/routes.rb
Rails.application.routes.draw do
devise_for :users
namespace :api do
namespace :v1 do
root "static_pages#home"
get '/help', to: 'static_pages#help'
get '/about', to: 'static_pages#about'
get '/contact', to: 'static_pages#contact'
end
end
end
エラーが発生
undefined method
devise_for'`
railsサーバーを再起動させないといけないらしい。
ActiveRecord::PendingMigrationError
マイグレーションもしないといけないらしい。
リスト 5.43: deviseのエンドポイントをデフォルトのものから変更する。 config/routes.rb
devise_scope :users do
get 'singup', to: 'devise/registers#new'
end
こうすることでprefixもsignupに変更される。でもサインアップページはNuxt側で制作するため、必要ないかもしれない。
リスト 5.44: backend/spec/requests/users/sessions_request_spec.rb
describe "GET /signup" do
it "returns http success" do
get signup_path
expect(response).to have_http_status(:success)
end
end
branch: backend-filling-in-layout