1

我有一个 oauth 流程,其中用户授予对某个范围的访问权限,然后我的应用程序可以做一些事情。为此,我需要一个具有定义范围的访问令牌。我实现了这个(使用 django allauth 包)并且效果很好。但是...我想测试一下。这是我到目前为止所拥有的(请求包就像类固醇上的 urllib):

    login = self.client.login(username='test_user', password='test')
    self.assertTrue(login)

    resp = self.client.post(reverse('oauth_login'))
    self.assertEqual(resp.status_code, 302)

    payload = {'session_key': 'email', 'session_password': 'pw', }

    resp2 = requests.post(resp['location'], data=payload)

    resp3 = self.client.get(reverse('do_stuff_with_access_token'))
    self.assertEqual(resp.status_code, 302)

这里的问题是我没有在我的请求变量中获得访问令牌。我的猜测是我超出了应用程序的范围,而 Django 没有在其请求范围内获取变量。

您如何以优雅的方式对此进行测试?模拟 access_token 对我来说似乎有点不对劲。我现在正试图去 Selenium 填写表格,但到目前为止,即使这样也不是真正的成功......

谢谢!

4

2 回答 2

1

向马克致敬!

在路上帮助任何人。嘲讽奏效了。在我的情况下(django 1.4),您需要将令牌添加到会话中。在网上可以找到很多不同的建议,但我喜欢简单的东西,这在 Django 中至少适用于测试套件:

session = self.client.session
session['request_token'] = {...}
session['access_token'] = {...}
session.save()
于 2012-11-12T21:17:46.553 回答
1

我遇到了同样的问题,发现以下解决了我的困境:

user = User.objects.get(username='lauren')
client = APIClient()
client.force_authenticate(user=user)

这直接取自 Django 文档:

http://www.django-rest-framework.org/api-guide/testing/#force_authenticateusernone-tokennone

不幸的是,在达到这一点之前进行了多次搜索。我希望这可以节省其他人一些时间。

于 2016-02-02T01:33:30.280 回答