Как передать макет объекта в модульный тест для обычного simple_tag? - PullRequest
1 голос
/ 06 мая 2019

У меня есть собственный simple_tag, который я определил следующим образом:

@register.simple_tag
# usage: {% get_contact_preference_string user %}
def get_contact_preference_string(user):
    if user.contact_choice == 'C':
       return '{} prefers phone calls.'.format(user.first_name)
    # method continues

И шаблон, который правильно загружает тег и использует его.

Однако я изо всех сил пытаюсьпередать имитирующего пользователя в модульных тестах.Вот как я пытаюсь написать тест:

def test_get_contact_preference_string_returns_correctly_formatted_content(self):
    test_customer = Customer.objects.create('tfirst', 'C')
    template_to_render = Template(
        '{% load contact_preference_helpers %}'
        '{% get_contact_preference_string test_customer %}'
    )

    rendered = template_to_render.render(test_customer)
    expected = 'tfirst prefers phone calls.'

    self.assertEqual(rendered, expected)

Повышение AttributeError: 'NoneType' object has no attribute 'contact_choice' при нажатии render(test_customer), поэтому я знаю, что неправильно передаю фиктивный объект.Я также пытался передать {'user': test_customer} безрезультатно.

Что я делаю не так?

1 Ответ

1 голос
/ 07 мая 2019

Вам необходимо передать экземпляр Context для визуализации шаблона. Попробуйте

from django.template import Context, Template

...

test_customer = Customer.objects.create('tfirst', 'C')
template_to_render = Template(
    '{% load contact_preference_helpers %}'
    '{% get_contact_preference_string test_customer %}'
)
ctx = Context({'test_customer': test_customer})
rendered = template_to_render.render(ctx)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...