ログインした状態の動作をテストする方法を整理した。
TestCaseクラスのclient.force_loginメソッドを使用することで、ログインした状態でのテストを行うことができる。
from django.contrib.auth import get_user_model
from django.test import TestCase
from pages.models import Items
UserModel = get_user_model()
class ItemsViewTest(TestCase):
def setUp(self): #テスト用データの登録
self.user = UserModel.objects.create(
username='test_user',
)
self.item = Items.objects.create(
title='test_title',
user = self.user,
)
def test_should_return_contents(self):
self.client.force_login(self.user) #ログイン
response = self.client.get("")
self.assertContains(response, self.item.title)
self.assertContains(response, self.item.user.username)
以下、使用したmodel, view, template
from django.conf import settings
from django.db import models
class Items(models.Model):
title = models.CharField("title", max_length=30)
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
def __str__(self):
return self.title
from pages.models import Items
from django.shortcuts import render
from django.contrib.auth.decorators import login_required
@login_required
def homePageView(request):
items = Items.objects.all()
context = {"items": items}
return render(request, "top.html", context)
<head> <meta charset="utf-8"> <title>test</title> </head> <body> {% if user.is_authenticated %} {% if items %} {% for item in items %} {{ item.title }} by {{ item.user.username }} {% endfor %} {% endif %} {% endif %} </body> </html>