【问题标题】:How to check redirect in Django while testing in Django在 Django 中测试时如何在 Django 中检查重定向
【发布时间】:2020-08-27 04:48:02
【问题描述】:

我想编写一个单元测试而不是检查我被重定向到哪里。

根据房间中玩家的数量,有 2 种行为。我想检查这个功能:

@login_required
def game_join(request, id):
    game = Game.objects.get(pk=id)
    if game.players_ready == game.max_players:
        return redirect('home',name="full")
    else:
        return redirect('detail', game.id)

测试:

def test_join_empty_room(self):

game = Game.objects.create(name='empty',host='dottore',is_played=False,max_players=4,players_ready=0)
self.join_url_empty = reverse('game_join', args=[game.id])
response = self.client.get(self.join_url_empty, follow=True)
print(response.redirect_chain)

self.assertEquals(response.status_code,200)

测试答案还可以。

重定向链: [('/player/login?next=/game/1/join', 302)]

所以它没有给我任何信息,因为 url 模式是这样的:

path('<int:id>/', detail, name = 'detail'),
path('<int:id>/join', game_join, name = 'game_join'),

所以正确答案应该是这样的:

http://127.0.0.1:8000/game/64/

如何正确地做到这一点?

【问题讨论】:

  • 确实如此,因为响应的路径包含被访问的路径,所以可以使用response.request['PATH_INFO']获取最后一个。

标签: python django testing view django-unittest


【解决方案1】:

您的视图需要客户端登录才能访问它。 Here's how to log in the test client.self.client.login(username='username', password='password')

【讨论】:

    猜你喜欢
    • 2019-12-20
    • 2016-01-27
    • 1970-01-01
    • 1970-01-01
    • 2018-04-11
    • 2011-05-04
    • 2021-12-25
    • 2020-06-05
    • 2011-04-06
    相关资源
    最近更新 更多