2012-10-22 29 views
7

Khi tôi đăng nhập vào ứng dụng của tôi máy chủ gửi cho tôi trở lại cookie (thông tin và cookie của một số ứng dụng):kiểm tra đáp ứng cookie với RSpec v.1

Response sent 170 bytes of Cookie data: 
Set-Cookie: user_credentials=val; path=/; HttpOnly; Secure 

Response sent 554 bytes of Cookie data: 
Set-Cookie: _app_session=otherVal; path=/; HttpOnly; Secure 

... và sau đó chuyển hướng đến trang chủ;

Cookie bao gồm một số cờ: ví dụ: httpOnly, Secure, v.v.

Làm cách nào để kiểm tra xem cookie có bao gồm các cờ đó với Rspec không?

Ít nhất tôi có thể tìm thấy các cookie đó ở đâu?

it "should generate cookies with proper flags" do  
    params = Factory.attributes_for(:user, 
     :username => "uname", 
     :password => "upass" 
    ) 
    # login 
    post 'create', params 

    response.should redirect_to home_url # => pass 

    puts "response cookie = #{response.cookies.inspect}" # => {} // no cookies in response, why? 
end 

Trả lời

6

số kỹ thuật điều khiển không tạo/gọi thực yêu cầu http, họ chỉ cần thiết lập bộ điều khiển được kiểm tra và gọi hành động yêu cầu trên đó. Không có yêu cầu http nào được thực hiện và không có bất động sản câu trả lời http được tạo. Vì vậy, bạn chỉ có thể kiểm tra các hoạt động bên trong của bộ điều khiển Rails ở mức trừu tượng hơn.

Việc xử lý cookie trong những thông số kỹ thuật khá đơn giản, thiết lập cookie trong một hành động như thế này:

def set_cookies 
    cookies[:foo] = 'bar' 
    cookies[:lorem] = {:value => 'ipsum', :expires => 3.days.from_now} 

    render :nothing => true 
end 

kết quả trong các giá trị sau truy cập trong spec:

it "should set some cookie values" do 
    get :set_cookies 

    # response.cookies looks like this: 
    # {'foo' => 'bar', 'lorem' => 'ipsum'}  

    response.cookies['foo'].should == 'bar' 
    response.cookies['lorem'].should == 'ipsum' 
end 

Để kiểm tra các loại của các cờ cookie mà bạn thấy trong các câu trả lời của mình, bạn sẽ phải sử dụng một số yêu cầu thực sự http. Có lẽ bạn có thể sử dụng đá quý capybara cho nó?

+0

Hmm .. thực sự 'capybara' nằm ngoài phạm vi công việc của tôi nhưng vẫn cảm ơn bạn; – ted

+0

Các cookie được đặt như thế nào? Bạn đang làm điều đó trong một bộ điều khiển? – severin

+0

một trong số chúng được đặt bằng đá quý 'Authlogic' và một số khác bằng 'ActionController' tôi tin rằng – ted

Các vấn đề liên quan