我使用自定义模板标签来计算货币值,从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>
现在我想知道测试这个模板标签的方法,如何传递请求,以及如何在该请求中使会话存在。
答案 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
,但这取决于您的申请。