Permalink
Browse files

Use Rack::Test instead of Sinatra::Test for tests

  • Loading branch information...
1 parent 7030e25 commit 2fa9fd81bb20ae62cf7b4e00430f0bd466a565f3 @sr sr committed with rtomayko Mar 28, 2009
Showing with 60 additions and 48 deletions.
  1. +38 −9 test/helper.rb
  2. +4 −4 test/helpers_test.rb
  3. +0 −12 test/mapped_error_test.rb
  4. +12 −21 test/routing_test.rb
  5. +6 −2 test/test_test.rb
View
@@ -14,7 +14,8 @@
$LOAD_PATH.unshift libdir unless $LOAD_PATH.include?(libdir)
require 'contest'
-require 'sinatra/test'
+require 'rack/test'
+require 'sinatra/base'
class Sinatra::Base
# Allow assertions in request context
@@ -24,24 +25,52 @@ class Sinatra::Base
Sinatra::Base.set :environment, :test
class Test::Unit::TestCase
- include Sinatra::Test
+ include Rack::Test::Methods
class << self
alias_method :it, :test
end
+ alias_method :response, :last_response
+
+ setup do
+ Sinatra::Base.set :environment, :test
+ end
+
# Sets up a Sinatra::Base subclass defined with the block
# given. Used in setup or individual spec methods to establish
# the application.
def mock_app(base=Sinatra::Base, &block)
@app = Sinatra.new(base, &block)
end
-end
-# Do not output warnings for the duration of the block.
-def silence_warnings
- $VERBOSE, v = nil, $VERBOSE
- yield
-ensure
- $VERBOSE = v
+ def app
+ Rack::Lint.new(@app)
+ end
+
+ def body
+ response.body.to_s
+ end
+
+ # Delegate other missing methods to response.
+ def method_missing(name, *args, &block)
+ if response && response.respond_to?(name)
+ response.send(name, *args, &block)
+ else
+ super
+ end
+ end
+
+ # Also check response since we delegate there.
+ def respond_to?(symbol, include_private=false)
+ super || (response && response.respond_to?(symbol, include_private))
+ end
+
+ # Do not output warnings for the duration of the block.
+ def silence_warnings
+ $VERBOSE, v = nil, $VERBOSE
+ yield
+ ensure
+ $VERBOSE = v
+ end
end
View
@@ -178,7 +178,7 @@ class HelpersTest < Test::Unit::TestCase
end
}
- get '/', :env => { 'rack.session' => { :foo => 'bar' } }
+ get '/', {}, { 'rack.session' => { :foo => 'bar' } }
assert_equal 'bar', body
end
@@ -373,7 +373,7 @@ def send_file_app(opts={})
end
it 'halts when a conditional GET matches' do
- get '/', :env => { 'HTTP_IF_MODIFIED_SINCE' => @now.httpdate }
+ get '/', {}, { 'HTTP_IF_MODIFIED_SINCE' => @now.httpdate }
assert_equal 304, status
assert_equal '', body
end
@@ -402,13 +402,13 @@ def send_file_app(opts={})
end
it 'halts when a conditional GET matches' do
- get '/', :env => { 'HTTP_IF_NONE_MATCH' => '"FOO"' }
+ get '/', {}, { 'HTTP_IF_NONE_MATCH' => '"FOO"' }
assert_equal 304, status
assert_equal '', body
end
it 'should handle multiple ETag values in If-None-Match header' do
- get '/', :env => { 'HTTP_IF_NONE_MATCH' => '"BAR", *' }
+ get '/', {}, { 'HTTP_IF_NONE_MATCH' => '"BAR", *' }
assert_equal 304, status
assert_equal '', body
end
View
@@ -51,18 +51,6 @@ class MappedErrorTest < Test::Unit::TestCase
assert_equal 'looks good', body
end
- it 'dumps errors to rack.errors when dump_errors is enabled' do
- mock_app {
- set :raise_errors, false
- set :dump_errors, true
- get('/') { raise FooError, 'BOOM!' }
- }
-
- get '/'
- assert_equal 500, status
- assert @response.errors =~ /FooError - BOOM!:/
- end
-
it "raises without calling the handler when the raise_errors options is set" do
mock_app {
set :raise_errors, true
View
@@ -258,17 +258,7 @@ class RoutingTest < Test::Unit::TestCase
end
it "supports deeply nested params" do
- input = {
- 'browser[chrome][engine][name]' => 'V8',
- 'browser[chrome][engine][version]' => '1.0',
- 'browser[firefox][engine][name]' => 'spidermonkey',
- 'browser[firefox][engine][version]' => '1.7.0',
- 'emacs[map][goto-line]' => 'M-g g',
- 'emacs[version]' => '22.3.1',
- 'paste[name]' => 'hello world',
- 'paste[syntax]' => 'ruby'
- }
- expected = {
+ expected_params = {
"emacs" => {
"map" => { "goto-line" => "M-g g" },
"version" => "22.3.1"
@@ -281,11 +271,11 @@ class RoutingTest < Test::Unit::TestCase
}
mock_app {
get '/foo' do
- assert_equal expected, params
+ assert_equal expected_params, params
'looks good'
end
}
- get "/foo?#{build_query(input)}"
+ get '/foo', expected_params
assert ok?
assert_equal 'looks good', body
end
@@ -368,8 +358,9 @@ class RoutingTest < Test::Unit::TestCase
end
it 'raises a TypeError when pattern is not a String or Regexp' do
- @app = mock_app
- assert_raise(TypeError) { @app.get(42){} }
+ assert_raise(TypeError) {
+ mock_app { get(42){} }
+ }
end
it "returns response immediately on halt" do
@@ -494,7 +485,7 @@ class RoutingTest < Test::Unit::TestCase
get '/foo'
assert not_found?
- get '/foo', :env => { 'HTTP_HOST' => 'example.com' }
+ get '/foo', {}, { 'HTTP_HOST' => 'example.com' }
assert_equal 200, status
assert_equal 'Hello World', body
end
@@ -509,7 +500,7 @@ class RoutingTest < Test::Unit::TestCase
get '/foo'
assert not_found?
- get '/foo', :env => { 'HTTP_USER_AGENT' => 'Foo Bar' }
+ get '/foo', {}, { 'HTTP_USER_AGENT' => 'Foo Bar' }
assert_equal 200, status
assert_equal 'Hello World', body
end
@@ -521,7 +512,7 @@ class RoutingTest < Test::Unit::TestCase
'Hello ' + params[:agent].first
end
}
- get '/foo', :env => { 'HTTP_USER_AGENT' => 'Foo Bar' }
+ get '/foo', {}, { 'HTTP_USER_AGENT' => 'Foo Bar' }
assert_equal 200, status
assert_equal 'Hello Bar', body
end
@@ -533,12 +524,12 @@ class RoutingTest < Test::Unit::TestCase
end
}
- get '/', :env => { :accept => 'application/xml' }
+ get '/', {}, { 'HTTP_ACCEPT' => 'application/xml' }
assert ok?
assert_equal 'application/xml', body
assert_equal 'application/xml', response.headers['Content-Type']
- get '/', :env => { :accept => 'text/html' }
+ get '/', {}, { :accept => 'text/html' }
assert !ok?
end
@@ -552,7 +543,7 @@ class RoutingTest < Test::Unit::TestCase
}
types.each do |type|
- get '/', :env => { :accept => type }
+ get '/', {}, { 'HTTP_ACCEPT' => type }
assert ok?
assert_equal type, body
assert_equal type, response.headers['Content-Type']
View
@@ -1,7 +1,11 @@
-require 'yaml'
require File.dirname(__FILE__) + '/helper'
+require 'yaml'
+require 'sinatra/test'
+
class TestTest < Test::Unit::TestCase
+ include Sinatra::Test
+
def request
YAML.load(body)
end
@@ -45,8 +49,8 @@ def request_params
assert_equal('DELETE', request['REQUEST_METHOD'])
head '/'
- assert_equal('', response.body)
assert response.headers['Content-Length'].to_i > 0
+ assert_equal('', body)
end
it 'allows to specify a body' do

0 comments on commit 2fa9fd8

Please sign in to comment.