2012-07-03 6 views
5

Próbuję przekazać cookie podczas wykonywania żądania GET, używając RSpec 2 i szyny 3.Uboczny cookie w żądaniu specyfikacji

Próbowałem następujące dotychczas.

get "/", {}, {"Cookie" => "uuid=10"} # cookies[:uuid] is nil 
request.cookies[:uuid] = 10 # request is nil 
@request.env["Cookie"] = "uuid=10" # @request is nil 
helper.request.cookies[:uuid] # helper is not defined 
cookies[:uuid] = 10 # cookies[:uuid] is nil 
controller.cookies[:uuid] = 10 # cookies is nil 

Czy to możliwe?

Odpowiedz

2

Miałem podobny problem i nie znalazłem odpowiedniego rozwiązania tego problemu.

stan rspec-rails docs, że powinno być możliwe:

# spec 
request.cookies['foo'] = 'bar' 
get :some_action 
response.cookies['foo'].should eq('modified bar') 

w moim specyfikacji request jest zawsze nil przed wykonaniem GET.

jestem teraz szyderczy cookies:

before { ActionDispatch::Request.any_instance.stubs(cookies: {locale: :en}) } 

this guy ma podobny problem.

+0

Docs Ci link do specyfikacji są do kontrolera, a nie żądać specyfikacje, dlatego '' powraca request' zerowe. Próbuję również dowiedzieć się, jak to zrobić w RSpec 3.4. –

1

Per this answer, można użyć metody cookies w terminie żądanie specyfikacji:

before { cookies['foo'] = 'bar' } 

Próbowałem rozwiązanie @ phoet za udziałem ActionDispatch::Request.any_instance.stubs, ale zgłasza błąd wraz z pozornie niepowiązanych wiadomości amortyzację w RSpec 3.4.

0

byłem trochę zdezorientowany tym, jak to zrobił w pierwszym, ale w rzeczywistości bardzo proste. Wewnątrz Rails's ActionDispatch :: IntegrationTest (lub w przypadku rspec w wersji :request) masz dostęp do zmiennej plików cookie.

To działa tak:

# set up your cookie 
cookies["fruits"] = ["apple", "pear"] 

# hit your endpoint 
get fruits_path, {}, {} 

# this works! 
expect(cookies["fruits"]).to eq(["apple", "pear"])