38

テンプレートタグのセットをDjangoアプリケーションに追加していますが、それらをテストする方法がわかりません。テンプレートで使用しましたが、機能しているようですが、もっとフォーマルなものを探していました。メインロジックはモデル/モデルマネージャーで実行され、テストされています。タグは単にデータを取得し、それを次のようなコンテキスト変数に格納します

{% views_for_object widget as views %}
"""
Retrieves the number of views and stores them in a context variable.
"""
# or
{% most_viewed_for_model main.model_name as viewed_models %}
"""
Retrieves the ViewTrackers for the most viewed instances of the given model.
"""

だから私の質問は、あなたは通常あなたのテンプレートタグをテストしますか、そしてあなたがそれをどのように行うのですか?

4

5 に答える 5

38

これは私のテストファイルの1つの短い一節です。ここで、self.render_templateはTestCaseの単純なヘルパーメソッドです。

    rendered = self.render_template(
        '{% load templatequery %}'
        '{% displayquery django_templatequery.KeyValue all() with "list.html" %}'
    )
    self.assertEqual(rendered,"foo=0\nbar=50\nspam=100\negg=200\n")

    self.assertRaises(
        template.TemplateSyntaxError,
        self.render_template,
        '{% load templatequery %}'
        '{% displayquery django_templatequery.KeyValue all() notwith "list.html" %}'
    )

これは非常に基本的で、ブラックボックステストを使用します。テンプレートソースとして文字列を取得し、それをレンダリングして、出力が期待される文字列と等しいかどうかを確認します。

このrender_template方法は非常に単純です。

from django.template import Context, Template

class MyTest(TestCase):
    def render_template(self, string, context=None):
        context = context or {}
        context = Context(context)
        return Template(string).render(context)
于 2009-11-06T22:22:08.740 に答える
22

あなたたちは私を正しい軌道に乗せました。レンダリング後にコンテキストが正しく変更されたことを確認できます。

class TemplateTagsTestCase(unittest.TestCase):        
    def setUp(self):    
        self.obj = TestObject.objects.create(title='Obj a')

    def testViewsForOjbect(self):
        ViewTracker.add_view_for(self.obj)
        t = Template('{% load my_tags %}{% views_for_object obj as views %}')
        c = Context({"obj": self.obj})
        t.render(c)
        self.assertEqual(c['views'], 1)
于 2009-11-06T20:13:50.000 に答える
10

テンプレートタグをテストする方法の良い例フラットページテンプレートタグのテスト

于 2011-10-12T14:20:32.857 に答える
0

テンプレートタグをテストしているとき、タグ自体が、作業していたテキストまたはdictを含む文字列を返します...他の提案の線に沿ったようなものです。

タグはコンテキストを変更したり、レンダリングする文字列を返すことができるため、レンダリングされた文字列を表示するだけで最速であることがわかりました。

それ以外の:

return ''

それを持っている:

return str(my_data_that_I_am_testing)

あなたが幸せになるまで。

于 2009-11-06T16:35:29.230 に答える
0

文字列はテンプレートとしてレンダリングできるため、templatetagを文字列として使用して、単純な「テンプレート」を含むテストを記述し、特定のコンテキストで正しくレンダリングされることを確認できます。

于 2009-11-06T14:41:50.330 に答える