gpt4 book ai didi

ruby-on-rails - 在Rails中为自定义错误页面编写测试

转载 作者:行者123 更新时间:2023-12-03 08:53:46 28 4
gpt4 key购买 nike

我已经在Rails应用程序中实现了自定义错误页面,以实现各种错误代码,例如:

config/routes.rb

Rails.application.routes.draw do
# ...

[400, 401, 403, 404, 405, 406, 418, 422, 500, 503].each do |status|
get "/#{status}", to: "application#render_error", status: status
end
end

应用程序/ Controller /application_controller.rb
class ApplicationController < ActionController::API
# ...

# Render an error status using JSON.
def render_error(status=nil)
# If there's no status, try and get it from the params, which will be the case with the error routes.
status ||= params[:status]

message = error_message(status)
render json: { error: message }, status: status
end

def error_message(status):
# Return a simple error message.
end
end

到目前为止,此方法运行良好,因为未发现的错误会使用我设置的错误路由自动呈现,并且我可以使用 render_error手动呈现错误。

我已经尝试为这些编写测试,但是我无法找出正确的方法(或任何方法)。到目前为止,这是我尝试过的:
class ApplicationControllerTest < ActionController::TestCase

test "Default error route should return correct status code" do
get "/418"
assert_response 418
end

test "render_error should return correct status code" do
render_error 418
assert_response 418
end
end

由于测试无法将 /418解释为 application Controller 的操作,因此第一个失败。由于测试无法找到 render_error方法,第二次失败。

我应该如何编写测试以正确测试它们?

最佳答案

像您在此处使用的功能测试用于testing the actions within a particular controller。由于未在ApplicationController中专门定义这些操作,因此您遇到了问题。

您可以将这些测试重写为integration tests(保存在test/integration/文件夹中),如下所示:

class ErrorsTest < ActionDispatch::IntegrationTest

test "Default error route should return correct status code" do
get "/418"
assert_response 418
end

end

这有点非标准,因为集成测试通常用于测试多个 Controller 的交互,即应用程序的流程。

我个人更喜欢 Rspec并将其写为 request specs

关于ruby-on-rails - 在Rails中为自定义错误页面编写测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33687547/

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