2013-04-29 17 views
6

Tôi đang viết một số kiểm tra đơn vị cho ứng dụng bình của tôi và tôi cần mô phỏng yêu cầu từ người dùng đã đăng nhập (tôi đang sử dụng thông tin đăng nhập bình).kiểm tra đơn vị bình: gửi cookie sau khi sửa đổi phiên

tôi đã học here rằng để làm được điều này tôi cần phải sửa đổi phiên và thêm user id và một tham số _fresh:

with app.test_client() as c: 
    with c.session_transaction() as sess: 
     sess['user_id'] = 'myuserid' 
     sess['_fresh'] = True 
    resp = c.get('/someurl') 

Vấn đề của tôi là tôi cần phải gửi một số cookie khác nhau với yêu cầu. Giống như

headers = Headers({'Cookie':'MYCOOKIE=cookie_value;'}) 
with app.test_client() as c: 
    with c.session_transaction() as sess: 
     sess['user_id'] = 'myuserid' 
     sess['_fresh'] = True 
    resp = c.get('/someurl', headers=headers) 

nhưng khi tôi thực hiện yêu cầu phiên này "biến mất" cùng với các biến tôi đã đặt.

Tôi nghĩ (và ai đó khác trên IRC có cùng ý tưởng) đó là vì định nghĩa rõ ràng của tôi về tiêu đề cookie sẽ ghi đè lên một cookie có chứa cookie session.

Câu hỏi của tôi là: có cách nào để đặt cookie của tôi mà không xóa session không?

Nếu không, có cách nào để trích xuất cookie session sau khi tôi sửa đổi phiên để tôi có thể thêm nó theo cách thủ công vào danh sách cookie trong đối tượng headers không?

Trả lời

11

giải pháp là dễ dàng hơn nhiều hơn tôi nghĩ.

Đối tượng test client có một phương pháp set_cookie, vì vậy mã nên chỉ đơn giản là:

with app.test_client() as c: 
    with c.session_transaction() as sess: 
     sess['user_id'] = 'myuserid' 
     sess['_fresh'] = True 
    c.set_cookie('localhost', 'MYCOOKIE', 'cookie_value') 
    resp = c.get('/someurl') 
+0

Nếu nó hoạt động, bạn nên chấp nhận điều này như là câu trả lời :-) –

+0

@SeanVieira Tôi cần đợi 2 ngày trước khi tôi có thể làm điều đó :-) –

0

Làm điều này:

with app.test_client() as c: 
    with c.session_transaction() as sess: 
     sess['user_id'] = 'myuserid' 
     sess['_fresh'] = True 
    resp = make_response(redirect('/someurl')) 
    resp.set_cookie('MYCOOKIE', cookie_value) 
+0

'make_response' làm việc trong một' ứng dụng context' và nó không thể được sử dụng theo cách bạn nói –

+1

nhưng tôi chỉ thấy c có phương thức 'set_cookie' ... vì vậy có lẽ tôi đã giải quyết được vấn đề! Cảm ơn gợi ý –

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