0

我知道从 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 中运行良好。

4

2 回答 2

1

您可以在路由中指定它们的默认格式,如下所示:

defaults format: :json do
  resources :photos
end

可以在这里看到:https ://guides.rubyonrails.org/routing.html#defining-defaults

您也可以随时使用 before_action:

before_action :set_format

def set_format
  request.format = 'json'
end
于 2019-07-11T13:13:23.547 回答
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
于 2019-07-14T23:38:59.640 回答