Rack nie obsługuje przechodzącej w sesjach poprzez żądanie (Rack> = v1.0). Read this post for more detailed information on that.
Najlepszym sposobem na ustawienie zmiennej sesji w aplikacji jest wywołanie akcji wewnątrz aplikacji, która ustawi zmienną sesji. Na przykład, jeśli masz drogę wewnątrz aplikacji, które ustawia zmienną sesji tak:
post '/set_sess_var/:id'
session[:user_id] = params[:id]
end
Udawajmy istnieje inna trasa, która rzeczywiście chciał sprawdzić, która jest za pomocą zmiennej sesji tak:
get '/get_user_attributes'
User.find(session[:user_id]).attributes
end
Następnie w swoich testach powinieneś najpierw wywołać trasę, która ustawia sesję, a następnie przejść na inną trasę, która go używa. Oto zapis rspec, ponieważ to, co używam do testowania:
it "should print out user attributes" do
user_id = 1
post '/set_sess_var/' + user_id
get '/get_user_attributes'
last_response.body.should == User.find(user_id).attributes
end
Jeśli miały być często stosując drogę w badaniach, a następnie można napisać metodę do osiągnięcia tego celu w pliku testowego (jeśli używasz rspec, to metoda ta może iść w spec_helper.rb lub w pliku controller_spec.rb):
def set_session_var(user_id)
post '/set_sess_var/' + user_id
end
a następnie wywołać ją w swoich badaniach, gdy trzeba było go ustawić:
it "should print out user attributes" do
set_session_var(1)
get '/get_user_attributes'
last_response.body.should == User.find(1).attributes
end
Nie odpowiedź, którą chciałem usłyszeć, ale myślę, że nie będę miał innego wyboru, niż przejść przez cały stos :(Dzięki, – Denny
Tak, słyszę Cię, trochę irytujące, ale nie jest to zbyt trudne, jeśli stworzysz metodę, może wywoływać za każdym razem, gdy chcesz ustawić sesję, i ma na celu uczynienie szafy bardziej bezpieczną (aby ludzie nie mogli przechwycić sesji i wykuć tych, którzy nie są autoryzowani), więc robią to z dobrymi intencjami – Batkins
Link Jest zepsuty. –