【发布时间】:2023-01-28 05:53:45
【问题描述】:
我正在用 Django 制作一个网站,并想用 pytest 测试存储在会话中的数据。
我有一个非常简单的观点:
def dev_my_view(request):
if request.method == "POST":
post_data = json.loads(request.body.decode("utf-8"))
product_id = post_data["productid"]
request.session["basket"] = {"id": product_id}
# print(request.session.items()) returns
# dict_items([('foo', 'bar'), ('basket', {'id, '99'})])
# as expected
response = JsonResponse({"id": f"product number {product_id}"})
return response
这是我写的测试:
class TestViewsWithSession(TestCase):
def test_my_view(self):
session = self.client.session
session["foo"] = "bar"
session.save()
url = reverse("home_page:my_view")
response = self.client.post(
url,
json.dumps({"productid": "99"}),
content_type="application/json",
)
# print(session.items()) returns
# dict_items([('foo', 'bar')])
# Test passes
self.assertEqual(response.status_code, 200)
# Test passes
# response.content = b'{"id": "product number 99"}
self.assertJSONEqual(response.content, {"id": "product number 99"})
# Test fails. KeyError: 'basket'
self.assertEqual(
session["basket"],
{"id": "99"},
)
self.assertNotEqual(
session["basket"],
{"id": "Invalid value"},
)
当我在测试 (session["foo"] = "bar") 中向会话添加数据时,会话在视图中包含此数据。
但是,看起来它不能以其他方式工作......
当一些数据被添加到视图(request.session["basket"] = {"id": product_id})中的会话时,我在测试中看不到这些数据。为什么 ?
【问题讨论】:
-
你有没有得到答案?我有同样的问题。
标签: python django pytest django-sessions