FormViewとは
以下とか、
https://qiita.com/box16/items/23f78e1014f6dc8f849e
以下を参照してください
https://docs.djangoproject.com/en/3.1/ref/class-based-views/generic-editing/#django.views.generic.edit.FormView
FormViewのテスト
FormViewは、formに入力された値をチェックし、validならsuccess_urlにリダイレクトする
このリダイレクトがテスト作成において結構厄介だったので備忘録的に対処方法を描いてみる
まず、どんなアプリを想定しているかというと、以下
https://sample-apps.box16.site/morpholy/
入力文字列を形態素解析するというアプリ
これをテストするには以下のようにテストケースを作る
from django.test import TestCase
from django.urls import reverse
class IndexViewTests(TestCase):
def test_full_post(self):
url = reverse('morpholy:index')
post_data = {
"text": "大きな男の人に声をかける、素早い女の人",
"select_part": ["名詞",
"動詞",
"形容詞"]}
response = self.client.post(
url, post_data, follow=True) # follow=Trueが重要
self.assertContains(response, "名詞")
self.assertContains(response, "声")
self.assertContains(response, "動詞")
self.assertContains(response, "かける")
self.assertContains(response, "形容詞")
self.assertContains(response, "素早い")
まず、フォームと、フォームに入力する内容をディクショナリとして定義する
それを、postメソッドでpostする
FormViewはpostするとリダイレクトして、responseはリダイレクトの結果が入る
(例えば、status_codeが200ではなく307が返ってくるとか)
postメソッドで、follow=Trueとすると、リダイレクト先の結果が入る
(status_codeは200でresultviewの結果が出る)
後は、仕様に合わせてテストする