テンプレートに次のコードがあります。
<div class="account">
{% if request.user.is_authenticated %}
<a href="{% url settings %}"
class="iconed username">{{ request.user.username }}</a>
|
<a href="{% url logout %}?next={{ request.path }}"
class="iconed logout">{% trans "Logout" %}</a>
{% else %}
<a href="{% url login %}?next={{ request.path }}" class="iconed login">{% trans "Login" %}</a>
|
<a href="{% url sign_up %}?next={{ request.path }}"
class="iconed sign-up">{% trans "Sign up" %}</a>
{% endif %}
</div>
ご覧のとおり、ログインしているかどうかによって異なるリンクが表示されます。手でテストすれば問題なく動作しますが、次のコードでテストしようとすると、次のようになります。
def test_home_logged_in(self):
if self.client.login(username='Test', password='secret'):
home = self.app.get('/')
self.assertOK(home)
self.assertContains(home, '/settings/')
self.assertContains(home, '/logout/')
else:
self.fail("Couldn't log in.")
login()はTrueを返しますが、テストは失敗します。ホームオブジェクトに対してshowbrowser()を呼び出したところ、返されたページは匿名ユーザーのページのように見えます。設定とログアウトへのリンクに加えて、サインアップとログインへのリンクが含まれています。
テンプレートで*request.user.is_authenticated*を使用して、ユーザーが認証されているかどうかを確認するのは正しいですか?テンプレートが、ユーザーがテストからサインアップしたことを認識しないのはなぜですか?
ありがとう!