在sample_template.html
:
{% load truck_filters %}
<div data-toggle="tooltip" data-placement="bottom" data-ten-condition='{{model.0|tenRange}}'>{{model.0}}</div>
# would render
<div data-toggle="tooltip" data-placement="bottom" data-ten-condition='0'>10</div>
我在应用中的app_filter.py
文件夹中有一个templatetags
:
from django import template
register = template.Library()
@register.filter(name='tenRange')
def tenRange(numberString):
# If it is blank
if numberString == '':
return -1
number = int(numberString)
lowerLimit = 3
mediumLimit = 5
medium2Limit = 8
newLimit = 10
if number < -1:
return -2
elif 0 <= number and number < lowerLimit:
return 3
elif lowerLimit <= number and number < mediumLimit:
return 2
elif mediumLimit <= number and number <= medium2Limit:
return 1
elif medium2Limit <= number and number <= newLimit:
return 0
# If above the new limit
elif number > newLimit:
return -1
# If there is an error
else:
return -1
我如何[单位?]在test_template_tags.py
文件夹的tests
中测试条件(使用不同的整数,变量类型等...)?
我目前的理解有限...... 我似乎无法找到一个好的工作示例,并且文档提示使用特定上下文呈现模板。我不确定是否需要,但如果是(约定),那么请您帮忙提供如何提供模板和上下文? (它是否与从视图中呈现它一样?如果是这样,你如何才能找到我试图测试的那一部分,而不会膨胀其他所需的变量来呈现?)
答案 0 :(得分:2)
您可以直接测试函数本身:
from django.test import TestCase
from myproject.myapp.templatetags.app_filter import tenRange
class tenRangeTestCase(TestCase):
def test_blank_string(self):
result = tenRange("")
self.assertEqual(result, -1)
def test_input_smaller_than_minus_one(self):
result = tenRange(-15)
self.assertEqual(result, -2)
# etc for your other conditions.
我认为您不需要渲染模板来测试过滤器逻辑。 Django已经有经过充分测试的模板渲染逻辑,你的过滤器的单元测试不应该担心,因为过滤器完成的“工作”不是渲染到模板,而是接受输入并返回输出