Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何测试模块呈现的json_Ruby On Rails_Rspec - Fatal编程技术网

Ruby on rails 如何测试模块呈现的json

Ruby on rails 如何测试模块呈现的json,ruby-on-rails,rspec,Ruby On Rails,Rspec,我已经创建了一个模块Error:ErrorHandler,它包含在我的ApplicationController中,用于处理错误 module Error module ErrorHandler def self.included(base) base.class_eval do rescue_from StandardError do |e| respond(:standard_error, 500, e.to_s)

我已经创建了一个模块
Error:ErrorHandler
,它包含在我的
ApplicationController
中,用于处理错误

module Error
  module ErrorHandler
    def self.included(base)
      base.class_eval do
        rescue_from StandardError do |e|
          respond(:standard_error, 500, e.to_s)
        end
        rescue_from CustomError do |e|
          respond(e.error, e.status, e.message.to_s)
        end
      end
    end

    private

    def respond(error, status, message: nil, json: Helpers::Render.json(error, status, message.instance_of?(Array) ? message : Array(message)))
      # Render the json, and define the HTTP status code
      render json: json, status: status
    end
  end
end
Helpers::Render.json
函数如下所示:

    def self.json(_error, _status, _message)
      {
          error: _error,
          status: _status,
          message: _message
      }.as_json
    end
我试图创建一些rspec测试来检查返回的json是否如预期的那样,但是我对呈现json的测试模块有点困惑

为这种情况创建测试的正确方法是什么


我知道当前的实现简单明了,但将来会扩展,所以我想创建一个适当的测试覆盖率。

这是一种有缺陷的方法,应该通过设置
config.exceptions\u app=self.routes
并创建一个路由和一个处理渲染错误的控制器来处理页数<代码>rescue_from将不会捕获路由错误或控制器外部发生的任何事件。我忘了提到应用程序是一个API,除了呈现JSON之外,它不会真正改变任何东西。我不知道为什么这种方法比我的方法有缺陷,另请参阅此类似的实现,因为这是捕获特定错误的示例,您所做的是在框架级别上捕获所有错误。这是一种有缺陷的方法,应该通过设置
config.exceptions\u app=self.routes
并创建一个路由和一个控制器来处理呈现错误页面<代码>rescue_from将不会捕获路由错误或控制器外部发生的任何事件。我忘了提到应用程序是一个API,除了呈现JSON之外,它不会真正改变任何东西。我不确定为什么这种方法比我的方法有缺陷,也可以看看这个类似的实现,因为这是一个捕获特定错误的示例,您所做的是一个捕获所有应该在框架级别上完成的操作。