Sha256: 1ba0b2537936375f7ac2cb52e2b63b8958291ad8bffd907cf9067a2e70e28131

Contents?: true

Size: 1.38 KB

Versions: 1

Compression:

Stored size: 1.38 KB

Contents

require "action_dispatch/testing/assertions/routing"

module RSpec::Rails
  module RoutingExampleGroup
    extend ActiveSupport::Concern
    include RSpec::Rails::RailsExampleGroup
    include RSpec::Rails::Matchers::RoutingMatchers
    include RSpec::Rails::Matchers::RoutingMatchers::RouteHelpers
    include RSpec::Rails::AssertionDelegator.new(ActionDispatch::Assertions::RoutingAssertions)

    module ClassMethods
      # Specifies the routeset that will be used for the example group. This
      # is most useful when testing Rails engines.
      #
      # @example
      #
      #     describe MyEngine::PostsController do
      #       routes { MyEngine::Engine.routes }
      #
      #       it "routes posts#index" do
      #         expect(:get => "/posts").to
      #           route_to(:controller => "my_engine/posts", :action => "index")
      #       end
      #     end
      def routes(&blk)
        before do
          self.routes = blk.call
        end
      end
    end

    included do
      before do
        self.routes = ::Rails.application.routes
      end
    end

    attr_reader :routes

    # @api private
    def routes=(routes)
      @routes = routes
      assertion_instance.instance_variable_set(:@routes, routes)
    end

    private

    def method_missing(m, *args, &block)
      routes.url_helpers.respond_to?(m) ? routes.url_helpers.send(m, *args) : super
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rspec-rails-3.0.0.rc1 lib/rspec/rails/example/routing_example_group.rb