LoginSignup
1
1

More than 5 years have passed since last update.

Djangoのテンプレートをテストする

Posted at

目的

実際にやるのかやらないのかは別として、
Djangoのテンプレートのテスト方法について備忘として整理する。

前提

動作確認は以下の環境で行った。

  • Ubuntu 18.04
  • Python python 3.6.6
    • Django 2.1.1
    • requests-html 0.9.0

Djangoで利用しているのはテストとテンプレート部分のみなので
Djangoの1系列の割合新しいものであれば使えるはず。

手順

テスト対象のDjangoテンプレートは以下の通り。
(他のテンプレートからincludeする前提なのでpartialなHTML)

thread_list.html
<div class="list-group">
    <div class="list-group-item active">スレッド一覧</div>
{% for comment in comments %}
    <a href="#{{ comment.comment_id }}" class="list-group-item">
        {{ comment.title }}
    </a>
{% endfor %}
</ul>

テストコードは以下の通り。

test_thread_list.py
from django import test
from django.shortcuts import render
from requests_html import HTML

class TestThreadList(test.TestCase):
    def test_render(self):

        # テンプレートに投入するデータの準備
        comments = []
        for num in range(4):
            comments.append({
                'comment_id': num,
                'title': 'title'+str(num),
            })
        response_param = {
            'comments': comments,
        }

        # レンダリングする
        rendered = render(None, 'thread_list.html', response_param)

        # HTMLパーサを準備してパース
        parser = HTML(html=rendered.content.decode())
        ## aタグのリストを取得
        elements = parser.find('a')

        for index in range(len(comments)):
            element = elements[index]
            ## textアトリビュートかあらaタグの中身を取得して比較する。
            self.assertEqual(element.text, "title"+str(index))
テストの実行
$ python manage.py test
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
.
----------------------------------------------------------------------
Ran 1 test in 0.004s

OK
Destroying test database for alias 'default'...

注意

あくまでも期待した(partialな)HTMLが生成されているかを
確認しているだけなので、実際のブラウザ上での表示については別途テストが必要。

基本的に専門外のエンジニアの戯言のようなものなので話半分、参考程度の扱いにしておくこと。

雑感

テンプレートのテストを書くのか書かないのかは別として、書く場合のやり方として多少の意味は見いだせそう。
プラスで、大きなテンプレートを一枚いたで準備するのではなく、includeなとを適宜使いながら
細かく作っていくことに意義は見いだせるようになりそう。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1