В моей тестовой базе данных у меня есть отзывы, к которым я обращаюсь к API в моем приложении Rails 5 только для API.
Пока я написал тесты для своего индекса и покажу действия для ReviewsController.
Как мне обработать ошибку / неверный запрос? Например, если кто-то пытается перейти на несуществующий маршрут или если кто-то пытается перейти на маршрут показа без существующего идентификатора, как это делается в RSpec?
# spec/controllers/api/v1/reviews_controller_spec.rb
require 'rails_helper'
RSpec.describe Api::V1::ReviewsController do
describe "GET #index" do
before do
get :index
end
it "returns HTTP Success" do
expect(response).to have_http_status(:success)
end
it "JSON body response contains expected review attributes" do
json_response = JSON.parse(response.body)
json_response["status"].should == "SUCCESS"
end
end
describe "GET #show" do
before do
get :show, params: { id: 1 }
end
it "returns HTTP Success" do
expect(response).to have_http_status(:success)
end
it "JSON body response contains expected review attributes" do
json_response = JSON.parse(response.body)
json_response["status"].should == "SUCCESS"
end
end
end
ReviewsController:
# spec/controllers/api/v1/reviews_controller.rb
module Api
module V1
class ReviewsController < ApplicationController
def index
@reviews = Review.order(created_at: :desc)
render json: { status: 'SUCCESS', message: 'loaded reviews', data: @reviews }
end
def show
@review = Review.find(params[:id])
render json: { status: 'SUCCESS', message: 'loaded the review', data: @review }
end
private
def review_params
params.require(:review).permit(:title, :star, :content, :name, :date)
end
end
end
end