我知道从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中可以正常工作。
答案 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