Тип Mime по умолчанию в тестах контроллера Rails 5 - PullRequest
0 голосов
/ 11 июля 2019

Я знаю, что начиная с Rails 5.0 я могу добавить атрибут as: :json для отправки тестового HTTP-запроса с типом контента application/json, подобным этому:

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

Есть ли способ настроить это поведение глобально, чтобы мне не нужно было указывать тип содержимого в каждом тесте?

Я обновляю Rails 4.2 и понял, что без этого атрибута все мои запросы обрабатываются как формы, закодированные в URL, включая мою полезную нагрузку, закодированную в виде URL. Это вызывает много сбоев, когда я запускаю свой набор тестов и по какой-то причине прекрасно работала в Rails 4.2.

Ответы [ 2 ]

1 голос
/ 15 июля 2019

Вы всегда можете просто переопределить 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
1 голос
/ 11 июля 2019

Вы можете указать в своих маршрутах формат по умолчанию для них, например так:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...