6

Tôi có hành vi ứng dụng chung thay đổi dựa trên nội dung cookie và cần phải kiểm tra nó. Ví dụ: nếu người dùng không có tập hợp cookie cho biết họ đã chấp nhận các điều khoản pháp lý của trang web, họ cần được chuyển hướng đến trang T & C.Làm cách nào để đặt cookie cho thử nghiệm tích hợp trong Rails?

tôi có thể thiết lập một cookie trong một thử nghiệm chức năng sử dụng

request.cookies["legal_accepted"] = "yes" 

Tuy nhiên, điều này sẽ không làm việc trong một hội nhập Test- không có đối tượng yêu cầu để làm việc với. Tôi đã không thể tìm thấy bất kỳ tài liệu nào về lý do tại sao điều này là như vậy, những gì khác là khác nhau, và thực hành tốt nhất để làm việc với sự khác biệt. Làm cách nào để đặt cookie cho một yêu cầu nhất định? Liệu tại sao và ở đâu được ghi lại ở bất cứ đâu?

Trả lời

5

Cách duy nhất tôi đã tìm thấy để thực hiện việc này là đặt tiêu đề cookie theo cách thủ công trong yêu cầu, ví dụ:

get "/", {}, { "HTTP_COOKIE" => "legal_accepted=yes; cookie2=value2; "} 
2

Trong Rails 3.2.x (chắc chắn trong 3.2.16) bạn có thể gán các cookie trực tiếp trong một thử nghiệm hội nhập:

cookies['foo'] = 'bar' 

Bây giờ bạn có thể truy cập các tập tin cookie 'foo' trong thử nghiệm của bạn và ứng dụng:

puts cookies['foo'] (returns 'bar') 
+0

Bạn đang sử dụng khung thử nghiệm nào? Tôi không thể làm việc này được. – dylankb

0

Nếu bạn muốn sử dụng Poltergeist có một số phương pháp để xử lý cookie mà tôi đã sử dụng trong kiểm tra tích hợp.

https://github.com/teampoltergeist/poltergeist#manipulating-cookies

Một điều cần lưu ý là nếu bạn muốn cập nhật một cookie, bạn sẽ phải loại bỏ các cookie đầu tiên, sau đó đặt nó.

page.driver.remove_cookie("cookie_name") 
page.driver.set_cookie("cookie_name", "some_value") 
Các vấn đề liên quan