rspec-rails + rabl рендеринг представлений, даже если я не хочу, чтобы они отображались?

Я использую rabl 0.6.13, rspec-rails 2.10.1 и rails 3.2.6.

Я пытаюсь специфицировать свои контроллеры изолированно, но по какой-то причине мои шаблоны rabl выдают мне всевозможные неопределенные исключения методов для mock, которые я использую в спецификациях контроллеров. Я не пользуюсь render_views, Я думал, что rspec не обрабатывает представления, если вы не укажете render_views в контроллере спец. Я запустил отладчик, чтобы убедиться, что render_views? оценивает false в блоке rspec-rails вставки перед. Кто-нибудь еще сталкивался с этой проблемой?

1 ответ

Решение

Ах, вот я и понял! Это изложено в этих комментариях: - https://github.com/nesquena/rabl/issues/37- https://github.com/rspec/rspec-rails/issues/565

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/etc.), и обработчик 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
Другие вопросы по тегам