Sha256: 2726595abe7713ec574db1d173326862cc4f90014ea0394cab092bfffafc26bf

Contents?: true

Size: 1.45 KB

Versions: 3

Compression:

Stored size: 1.45 KB

Contents

require 'webrat'

module ViewExampleGroupBehaviour
  include Webrat::Matchers
  include Rspec::Matchers

  class ViewExampleController < ActionController::Base
    attr_accessor :controller_path
  end

  def view
    @view ||= begin
                view = ActionView::Base.new(ActionController::Base.view_paths, assigns, controller)
                view.extend(Module.new { def protect_against_forgery?; end })
                view
              end
  end

  def assign(name, value)
    assigns[name] = value
  end

  def assigns
    @assigns ||= {}
  end

  def response
    @response
  end

  def file_to_render
    running_example.example_group.description
  end

  def controller_path
    parts = file_to_render.split('/')
    parts.pop
    parts.join('/')
  end

  def render
    @response = view.render :file => file_to_render
  end

  def method_missing(selector, *args)
    if Rails.application.routes.named_routes.helpers.include?(selector)
      controller.__send__(selector, *args)
    else
      super
    end
  end

  Rspec.configure do |c|
    c.include self, :example_group => { :file_path => /\bspec\/views\// }
  end

private

  def controller
    @controller ||= begin
                      controller = ViewExampleController.new
                      controller.controller_path = controller_path
                      controller.request = ActionDispatch::Request.new(Rack::MockRequest.env_for("/url"))
                      controller
                    end
  end

end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
rspec-rails-2.0.0.beta.4 lib/rspec/rails/example/view_example_group.rb
rspec-rails-2.0.0.beta.3 lib/rspec/rails/example/view_example_group.rb
rspec-rails-2.0.0.beta.2 lib/rspec/rails/example/view_example_group.rb