我正在运行sinatra应用程序,并使用rspec 2.7.0
和webrat 0.7.3
(均为最新版本)进行了测试套件设置。我对我的所有请求操作都有一套广泛的测试,并且它似乎工作正常。今天,我发现了Sinatra的redirect back请求级帮助程序,并在我的应用程序的几个区域中实现了它,这些区域呈现带有获取参数的请求的表单。测试Sinatra的重定向返回rspec
有关redirect back
帮手的好处是,如果我有一个动作说:
get '/login' do
@used_var = params[:var]
haml :login
end
这使得一个形式,我可以对发布请求接收表单验证:
post '/login' do
# pretend User.authenticate pulls back a user entry from the database if there
# is a valid username/password combination
unless User.authenticate(params[:username], params[:password]).nil?
redirect '/content'
else
flash[:notice] = "Invalid username/password combo"
redirect back # will redirect back to the get '/login' request
end
end
如果表单没有正确验证,它将使用from和redirect重定向到页面,并保留传入的所有参数,而不必担心将它存储到会话变量中。唯一的问题是,rspec似乎不想与redirect back
帮手很好地玩。也就是说,如果我有一个规范的动作,做这个:
it 'should redirect to login when invalid username/password combo is received.' do
get '/login', :var => 'value'
fill_in 'username', :with => 'invalid_username'
fill_in 'password', :with => 'invalid_password'
click_button 'Submit'
last_response.should be_redirect; follow_redirect!
last_request.url.should include("/login")
end
该规范没有因为通过出于某种原因,似乎rspec
或webrat
未在redirect back
助手拿起,转而将请求重定向回我的应用程序的网址为root
('/'
)。
我想知道的是,是否有办法让rspec重定向到这些实例中的正确位置?当我用浏览器测试它时,实际应用程序的功能与预期相同(它将我重定向到带有参数的第一页),但rspec测试无法正确传递。
对'post'动作的请求是由'get'动作中的一个表单完成的。您是否打算将当前请求路径放在名为'referer'的表单上的隐藏字段?同样,重定向返回操作对于浏览器来说工作正常,它只是对我的rspec测试无法正常工作。 – Batkins