我想写一个测试,看看我的登录是否重定向到正确的页面。目前我使用这个代码是不工作:测试登录重定向
class TestAuth(TestCase):
def setUp(self):
self.client = Client()
@classmethod
def setUpTestData(cls):
user_login = get_user_model().objects.create(username='admin', email='[email protected]', password='asdf1234')
cls.user_login = user_login
def test_login_redirect(self):
response = self.client.post(
reverse('udt:login'),
{
'username': 'admin',
'password': 'asdf1234'
}
)
self.assertRedirects(response, reverse('udt:table_list'))
其中udt:login
相当于'/udt/accounts/login/'
和udt:table_list
相当于'/udt/table/'
。
登录功能是Django内置的自定义模板登录功能。当我运行测试,我得到以下错误:
AssertionError: 200 != 302 : Response didn't redirect as expected: Response code was 200 (expected 302)
然而,当我实际测试中应用的登录功能,我得到这个:
[2017/05/30 14:43:22] HTTP POST /udt/accounts/login/ 302 [0.13, 127.0.0.1:60127]
[2017/05/30 14:43:22] HTTP GET /udt/table/ 200 [0.15, 127.0.0.1:60127]
这对我来说好像它实际上是正确重定向。
所以,我的问题是我的测试导致断言错误是什么错误?我在Django测试很新,所以它可能只是我缺少的东西,但它好像测试应该传递给我。
任何帮助,这将不胜感激。
UPDATE
登录模板看起来像这样(只是把标准的Django登录模板,并增加了一些引导类名的话):
{% load bootstrap3 %}
<form id="login-form" method="post" action="{% url 'udt:login' %}">
{% csrf_token %}
<table class="table">
<tr>
<td><label for="id_username">Username</label></td>
<td><input id="id_username" name="username" type="text" class="form-control"></td>
</tr>
<tr>
<td><label for="id_password">Password</label></td>
<td><input id="id_password" name="password" type="password" class="form-control"></td>
</tr>
</table>
{% if form.errors %}
<p class=" label label-danger">
Your username and password didn't match.
Please try again.
</p>
{% endif %}
<input type="submit" value="Login" class="btn btn-primary pull-right" />
<input type="hidden" name="next" value="{{ next }}" />
</form>
网址进行登录看起来像这样:
url(r'^login/$', auth_views.login, {'template_name': 'auth/login.html'}, name='login')
我正在使用Django v.1.11.1。
我不能帮你的测试,但我认为完成你正在做的事情的最好方法是简单地把这一行放到你的settings.py 'LOGIN_REDIRECT_URL ='/ YourSite /''这个工作100%。 – hansTheFranz
我已经在我的settings.py中,我仍然得到相同的错误,所以我不知道为什么它发生了! – BeeNag
在这种情况下,我不能告诉你什么是错的对不起。希望一些更有经验的用户会启发我们。 – hansTheFranz