django测试使用该请求的templatetag

时间:2017-12-05 20:26:07

标签: django django-testing

我使用自定义模板标签来计算货币值,从select元素中选择货币。当用户选择他想要使用的货币时,我会在会话中保存所选的货币并刷新页面。

模板标签显示为所选货币计算的值。

在任何模板中

{% load currency %}
{% set_currency request 156 %}

在my_app / templatetags / currency.py

from django.conf import settings
from djmoney_rates.utils import convert_money
register = template.Library()

@register.inclusion_tag('includes/price.html')
def set_currency(request, price):
    # currency_session could be 'USD', 'EUR' ...
    currency_session = request.session.get(settings.CURRENCY_SESSION_KEY, settings.DEFAULT_CURRENCY)
    money = convert_money(price, settings.DEFAULT_CURRENCY, currency_session)
    return {'amount': '%d' % money.amount, 'currency': money.currency}

includes / price.html只是

<span class="amount">{{amount}}</span>
<span class="currency">{{currency}}</span>

现在我想知道测试这个模板标签的方法,如何传递请求,以及如何在该请求中使会话存在。

1 个答案:

答案 0 :(得分:0)

我只会测试这个功能。

from django.test import TestCase, RequestFactory
from django.conf import settings
from my_app.templatetags.currency import set_currency

class SetCurrencyTestCase(TestCase):

    def setUp(self):
        self.factory = RequestFactory()

    def test_set_currency(self):
        request = self.factory.get('/any/path/really/')
        request.session = {
            settings.CURRENCY_SESSION_KEY: settings.DEFAULT_CURRENCY
        }

        response = set_currency(request, 156)

        self.assertEqual(response['amount'], 42)
        self.assertEqual(response['currency'], 'BTC')

我还考虑在不使用request.session的情况下设置settings,但这取决于您的申请。