gpt4 book ai didi

ruby-on-rails - 如何在 Rails 中使用 RSpec 测试处理错误请求?

转载 作者:行者123 更新时间:2023-11-28 21:15:23 26 4
gpt4 key购买 nike

在我的测试数据库中,我有一些评论,我正在我的仅 API 的 Rails 5 应用程序中进行 API 调用。

到目前为止,我已经为我的索引编写了测试并显示了 ReviewsController 的操作。

我如何处理错误/错误的请求处理?例如,如果有人试图去一条不存在的路线,或者如果有人试图导航到没有现有 ID 的表演路线,那么在 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

评论 Controller :

# 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

最佳答案

在 Controller 测试中,您可以指定 Controller 在 id 不存在时引发 ActiveRecord::RecordNotFound

describe "GET #show" do
context "with a valid id" 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

context "with an invalid id" do
it "raises an error" do
expect {
get :show, params: { id: "invalid-identifier" }
}.to raise_error ActiveRecord::RecordNotFound
end
end
end

请注意,当 Controller 在 production 环境中引发 ActiveRecord::RecordNotFound 时,Ruby on Rails 将返回 404(未找到) – 如果默认值未更改。在 Rails Guides 中阅读有关此行为的更多信息.

关于ruby-on-rails - 如何在 Rails 中使用 RSpec 测试处理错误请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59440053/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com