我正在使用rabl 0.6.13,rspec-rails 2.10.1和rails 3.2.6。
我正在尝试单独指定我的控制器,但由于某种原因,我的rabl模板在我在控制器规范中使用的模拟中抛出了各种未定义的方法异常。我使用render_views
不。我认为除非你在控制器规范中指定render_views
,否则rspec不会处理视图。我运行调试器以确保{block}轨道插入前的render_views?
评估为false
。还有其他人遇到过这个问题吗?
答案 0 :(得分:0)
def self.call(template)
source = if template.source.empty?
File.read(template.identifier)
else # use source
template.source
end
%{ ::Rabl::Engine.new(#{source.inspect}).
render(self, assigns.merge(local_assigns)) }
end # call
rspec-rails将模板设置为空白源(而不是将整个渲染过程存根,以便rails正确处理格式/ mime-types /等),并且rabl处理程序查看空白源并决定读取文件-系统。因此,无论是rabl还是rspec-rails,都需要稍微调整才能实现这一目标。现在我已经修补了rspec-rails:
class EmptyTemplatePathSetDecorator < ::ActionView::Resolver
attr_reader :original_path_set
def initialize(original_path_set)
@original_path_set = original_path_set
end
# @api private
def find_all(*args)
original_path_set.find_all(*args).collect do |template|
::ActionView::Template.new(
" ", # <======================== this is not "empty"
template.identifier,
template.handler,
{
:virtual_path => template.virtual_path,
:format => template.formats
}
)
end
end
end