2011-08-14 9 views
5

'daki POST verileri nasıl kaydedilir? Rack :: Test ile nasıl çalışacağımı anlama konusunda sorun yaşıyorum, POST ile sahip olduğum sorun.Rack :: Test

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 

Ve çıkış: Bu bir testtir

require 'sinatra' 

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

hellotesting.rb: Bu sınıflar ve hata vardır Bu

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' 

cevap

4

olabilir sen misin Rack :: Test karışımlarını bireysel sınıflarınıza dahil etmeniz gerekir. Esas olarak, sınıfları kullanmayan RSpec kullanıyorum, ancak ekstra işlevselliği çekmek için Ruby's include'un özel bir çeşidini kullanıyorum. include Rack::Test::Methods'u HelloWorldTest kasa sınıfı tanımınızın içine sokmayı deneyebilirsiniz. Sinatra'nın testing, Rack::Test ile test için daha fazla bilgiye sahiptir.

+0

Gerçekten de, testlerime miksler eklemek ve birkaç değişkeni değiştirmek onu düzeltdi. Teşekkürler! – ferostar