Ruby on rails 如何在RSpec控制器规格中设置默认格式?
Rails应用程序的控制器具有响应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 .
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