【问题标题】:rspec-rails + rabl rendering views even if I don't want them to be rendered?rspec-rails + rabl 渲染视图,即使我不希望它们被渲染?
【发布时间】:2012-06-20 17:42:31
【问题描述】:

我正在使用 rabl 0.6.13、rspec-rails 2.10.1 和 rails 3.2.6。

我试图单独指定我的控制器,但由于某种原因,我的 rabl 模板在我在控制器规范中使用的模拟对象上抛出了各种未定义的方法异常。我使用render_views。我认为 rspec 不会处理视图,除非您在控制器规范中指定 render_views。我已经运行了调试器以确保 render_views? 在块 rspec-rails 插入之前计算为 false。有没有其他人遇到过这个问题?

【问题讨论】:

  • 另外,我的 erb/haml 模板不会发生这种情况。
  • 您在 rspec-rails 项目上打开过问题吗?如果不是,为什么?
  • 是的,我在下面的回答中发布了链接:github.com/rspec/rspec-rails/issues/565#issuecomment-6479742 从与 David Chelimsky 的对话中可以看出,我们认为模板引擎(如 Rabl)应该能够处理空白template.source。 David Sommers 说 Rabl 将删除 self.call(template)if template.source.empty? 部分(见下文)。事实上,它已经被提交了:github.com/nesquena/rabl/commit/….

标签: ruby-on-rails rspec rspec-rails rabl


【解决方案1】:

啊,我想通了!这些 cmets 对此进行了概述: - https://github.com/nesquena/rabl/issues/37#issuecomment-6474467 - https://github.com/rspec/rspec-rails/issues/565#issuecomment-6474362

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-20
    相关资源
    最近更新 更多