2011-08-14 18 views
5

Tengo problemas para entender cómo trabajar con Rack :: Test, el problema que tengo es con POST. Estos son las clases y el error:Cómo POSTAR datos en Rack :: Test

hellotesting.rb

require 'sinatra' 

post '/foo' do 
    "Hello #{params[:name]}." 
end 

Ésta es la prueba:

require 'hellotesting' 
require 'test/unit' 
require 'rack/test' 

set :environment, :test 

class HelloWorldTest < Test::Unit::TestCase 
    def test_it_says_hello_to_you 
     browser = Rack::Test::Session.new(Rack::MockSession.new(Sinatra::Application)) 
    post "/foo", "name" => "Bryan" 
     assert browser.last_response.ok? 
     assert_equal 'Hello Bryan', browser.last_response.body 
    end 
end 

Y la salida:

1) Error: 
test_it_says_hello_to_you(HelloWorldTest): 
ArgumentError: wrong number of arguments (1 for 0) 
/Library/Ruby/Gems/1.8/gems/sinatra-1.2.6/lib/sinatra/base.rb:1141:in `name' 
/Library/Ruby/Gems/1.8/gems/sinatra-1.2.6/lib/sinatra/base.rb:1141:in `send' 
/Library/Ruby/Gems/1.8/gems/sinatra-1.2.6/lib/sinatra/base.rb:1141:in `compile!' 
/Library/Ruby/Gems/1.8/gems/sinatra-1.2.6/lib/sinatra/base.rb:1141:in `each_pair' 
/Library/Ruby/Gems/1.8/gems/sinatra-1.2.6/lib/sinatra/base.rb:1141:in `compile!' 
/Library/Ruby/Gems/1.8/gems/sinatra-1.2.6/lib/sinatra/base.rb:1129:in `route' 
/Library/Ruby/Gems/1.8/gems/sinatra-1.2.6/lib/sinatra/base.rb:1118:in `post' 
(__DELEGATE__):3:in `send' 
(__DELEGATE__):3:in `post' 
testingjeison.rb:11:in `test_it_says_hello_to_you' 

Respuesta

4

Puede ser que usted necesita incluir Rack :: Test mixins en sus clases individuales. Uso principalmente RSpec, que no usa clases, pero usa una variante especializada de Ruby's include para obtener funcionalidad adicional. Puede intentar poner en include Rack::Test::Methods dentro de su definición de clase de caso HelloWorldTest. El testing de Sinatra tiene más información para probar con Rack::Test.

+0

De hecho, agregué mixins en mi prueba y modifiqué algunas variables para solucionarlo. ¡Gracias! – ferostar

Cuestiones relacionadas