docs
[sinatra.git] / lib / sinatra / test_methods.rb
blob2273c8d06e642f566a174258185292adbeee0112
1 require 'uri'
3 module Sinatra
5   # These methods are for integration testing without an internet connection.  They are available in Test::Unit::TestCase and when in Irb.
6     
7   module TestMethods
9     # get_it, post_it, put_it, delete_it
10     # Executes the method and returns the result of the body
11     # 
12     # options:
13     # +:params+ a hash of name parameters
14     #
15     # Example:
16     #   get_it '/', :name => 'Blake' # => 'Hello Blake!'
17     #
18     %w(get post put delete).each do |verb|
19       module_eval <<-end_eval
20         def #{verb}_it(path, params = {})
21           request = Rack::MockRequest.new(Sinatra::Dispatcher.new)
22           @response = request.#{verb} path, :input => generate_input(params)
23           body
24         end
25       end_eval
26     end
27         
28     def response
29       @response || Rack::MockResponse.new(404, {}, '')
30     end
32     def status
33       response.status
34     end
36     def text
37       response.body
38     end
39     alias :xml :text
40     alias :html :text
41     alias :body :text
43     def headers
44       response.headers
45     end
46     
47     private
48     
49       def generate_input(params)
50         params.map { |k,v| "#{k}=#{URI.escape(v)}" }.join('&')
51       end
53   end
54   
55 end