Ruby on rails 如何在RSpec控制器规格中设置默认格式?

Ruby on rails 如何在RSpec控制器规格中设置默认格式?,ruby-on-rails,ruby,rspec,rspec-rails,Ruby On Rails,Ruby,Rspec,Rspec Rails,Rails应用程序的控制器具有响应html和json格式的操作。在规范中,我应该为所有请求指定格式:“json”: it 'returns list of entities' do get :list, format: 'json' ... end 有没有办法避免为每个示例编写格式:“json”?大概是这样的: context 'json', format: 'json' do it 'returns list of entities' do get :list .

Rails应用程序的控制器具有响应
html
json
格式的操作。在规范中,我应该为所有请求指定
格式:“json”

it 'returns list of entities' do
  get :list, format: 'json'
  ...
end
有没有办法避免为每个示例编写
格式:“json”
?大概是这样的:

context 'json', format: 'json' do
  it 'returns list of entities' do
    get :list
    ...
  end
end
这是根据但针对控制器规格进行调整的

试验日期:RSpec 3.8,轨道5.2.1

此模块使用元编程来重新定义
get
post
etc方法和一个记忆化的
let
帮助程序(
default\u格式
),而不是元数据

它基本上只是将
format:default\u format
合并到参数中并调用原始实现

# spec/support/default_format.rb
module DefaultFormat
  extend ActiveSupport::Concern

  included do
    let(:default_format) {}
    prepend RequestHelpersCustomized
  end

  module RequestHelpersCustomized
    l = lambda do |path, **kwargs|
      kwargs[:format] ||= default_format if default_format
      super(path, kwargs)
    end
    %w(get post patch put delete).each do |method|
      define_method(method, l)
    end
  end
end
然后将此模块包括在
rails\u helper.rb
spec\u helper.rb
中(如果您只有一个测试设置文件):

用法:

context 'json' do
  let(:default_format) { :json }
end

我不认为使用示例元数据可以做到这一点,因为它在示例中不可用(这是调用
get
方法的地方)。

为搜索能力编辑了标题。这也是一个潜在的重复-目前似乎没有一个目前正在工作的答案。
context 'json' do
  let(:default_format) { :json }
end