2012-07-03 41 views
5

Tôi đang cố gắng chuyển cookie khi thực hiện yêu cầu GET, sử dụng rspec 2 và đường ray 3.Truyền cookie theo yêu cầu spec

Tôi đã thử những điều sau cho đến nay.

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 

Có thể không?

Trả lời

2

tôi gặp sự cố tương tự và tôi không tìm thấy giải pháp thích hợp cho vấn đề này.

các rspec-rails docs trạng thái đó chúng ta có thể:

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

trong spec của tôi request luôn nil là trước khi thực hiện một get.

tôi bây giờ chế giễu các cookie:

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

this guy có một vấn đề tương tự.

+0

Các tài liệu bạn liên kết đến là dành cho kỹ thuật điều khiển, không yêu cầu kỹ thuật, đó là lý do 'trả request' 'nil'. Cũng cố gắng tìm ra cách thực hiện điều này trong RSpec 3.4. –

1

mỗi this answer, bạn có thể sử dụng phương pháp cookies trong yêu cầu thông số kỹ thuật:

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

tôi đã cố gắng giải pháp @ phoet của sự tham gia của ActionDispatch::Request.any_instance.stubs, nhưng nó ném một lỗi cùng một thông điệp deprecation dường như không liên quan trong RSpec 3.4.

0

tôi là một chút nhầm lẫn bởi cách bạn đã làm điều này lúc đầu, nhưng nó thực sự rất dễ dàng. Bên trong ActionDispatch của Rails :: IntegrationTest (hoặc trong trường hợp của rspec là thông số :request) bạn có quyền truy cập vào biến cookie.

Nó hoạt động như thế này:

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

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

# this works! 
expect(cookies["fruits"]).to eq(["apple", "pear"]) 
Các vấn đề liên quan