Rails 5控制器测试中的默认Mime类型

时间:2019-07-11 10:18:53

标签: ruby-on-rails ruby ruby-on-rails-5

我知道从Rails 5.0开始,我可以添加as: :json属性以使用application/json内容类型发送测试HTTP请求,如下所示:

post :create, params: { account_id: 123, user: { ... } }, as: :json

是否有一种全局配置此行为的方法,因此无需在每个测试中指定内容类型?

我正在从Rails 4.2升级,并且意识到没有此属性,我的所有请求都将被视为URL编码形式,包括将我的有效载荷进行URL编码。当我运行测试套件时,由于某些原因,这会导致很多失败,并且在Rails 4.2中可以正常工作。

2 个答案:

答案 0 :(得分:1)

您可以在路由中为其指定默认格式,如下所示:

before_action :set_format

def set_format
  request.format = 'json'
end

如此处所示:https://guides.rubyonrails.org/routing.html#defining-defaults

您也可以始终使用before_action:

{{1}}

答案 1 :(得分:1)

您始终可以覆盖ActionDispatch::Integration::RequestHelpers#process

module JSONRequestHelper
  alias_method :original_process, :process
  def process(method, path, **args)
    original_process(method, path, args.merge(as: :json))
  end
end 

require 'test_helper'

class ApiTest < ActionDispatch::IntegrationTest
  include JSONRequestHelper
end