【发布时间】:2023-02-07 04:10:02
【问题描述】:
我正在使用 Python Django Social Auth 并通过以下三个步骤扩展管道
- 创建用户之前的一个 (partial pipeline) 请求一些数据。
- 一个用于用户创建(覆盖
social.pipeline.user.create_user方法)。 - 创建用户后的一个。
这是 pipeline 目前的样子
SOCIAL_AUTH_PIPELINE = ( 'social_core.pipeline.social_auth.social_details', 'social_core.pipeline.social_auth.social_uid', 'social_core.pipeline.social_auth.social_user', 'myapp.file.before_user_is_created', 'myapp.file.create_user', 'social_core.pipeline.social_auth.associate_user', 'myapp.file.after_user_creation', 'social_core.pipeline.social_auth.load_extra_data', 'social_core.pipeline.user.user_details', )
为了测试它,我正在关注similar logic to the one used here。这就是我所拥有的
@mock.patch("social_core.backends.base.BaseAuth.request") def test_complete(self, mock_request): url = reverse("social:complete", kwargs={"backend": "facebook"}) url += "?code=2&state=1" mock_request.return_value.json.return_value = {"access_token": "123"} with mock.patch( "django.contrib.sessions.backends.base.SessionBase" ".set_expiry", side_effect=[OverflowError, None], ): response_1 = self.client.get(url) self.assertEqual(response_1.status_code, 302) self.assertEqual(response_1.url, "/before-user-is-created/") response_2 = self.client.post("/before-user-is-created/", {"some_keys": "some_values"}) self.assertEqual(response_2.status_code, 302) self.assertEqual(response_2.url, "/social-auth/complete/facebook/") response_3 = self.client.post("/social-auth/complete/facebook/") return response_3对于第 1 步,我有一个 url (
/before-user-is-created/) 和一个特定视图。所以,我得到了那个视图,我可以在运行时根据它采取行动response_1 = self.client.get(url)正如您从
self.assertEqual(response_1.url, "/before-user-is-created/")和response_2 = self.client.post("/before-user-is-created/", {"some_keys": "some_values"})中看到的那样。问题出在第 3 步。这本质上是一个调用另一个函数 (
function_called()) 的函数 (after_user_creation())def after_user_creation(user, *args, **kwargs): ... function_called(something_from_user)该函数在测试期间在此部分中被调用(连同
load_extra_data和user_details(管道中它后面的那些))response_2 = self.client.post("/before-user-is-created/", {"some_keys": "some_values"}) ... response_3 = self.client.post("/social-auth/complete/facebook/") ...如何防止
function_called(something_from_user)在测试期间运行?
【问题讨论】:
标签: python django authentication django-testing python-social-auth