Как отправить электронное письмо для сброса пароля Django с помощью Celery (без стороннего пакета)?

Предисловие

Существует несколько определений объектов, которые не являются реальными. Общий термин - тест двойной. Ссылка

Согласно

статья Мартина Фаулера :

  • Объекты Dummy передаются, но никогда не используются. Обычно они используются для заполнения списков параметров.
  • Фальшивые объекты фактически имеют рабочие реализации, но обычно используют некоторый ярлык, который делает их непригодными для производства (в качестве примера используется база данных с памятью).
  • Штукеры предоставляют консервированные ответы на вызовы, сделанные во время теста, обычно вообще не реагируют на что-либо вне того, что запрограммировано для теста. Stubs также может записывать информацию о вызовах, таких как заглушка шлюза электронной почты, которая запоминает отправленные сообщения, или, может быть, только то, сколько сообщений он отправил.
  • Mocks - это то, о чем мы говорим здесь: объекты, запрограммированные ожиданиями, которые формируют спецификацию ожидаемых вызовов.

Стиль

Mocks vs Stubs = Поведенческое тестирование vs State тестирование

Принцип

Согласно принципу Проверяйте только одну вещь на тест , в одном тесте может быть несколько заглушек, но обычно есть только один mock

Жизненный цикл

Жизненный цикл тестирования с заглушками:

  1. Настройка - подготовить тестируемый объект и его коллабораторы.
  2. Упражнение - проверить функциональность.
  3. Проверить состояние - использовать утверждения для проверки состояния объекта.
  4. Teardown - очистка ресурсов.

Test жизненный цикл с mocks:

  1. Данные установки - Подготовьте объект, который bein g
  2. Ожидания настройки - Подготовьте ожидания в макете, который используется первичным объектом.
  3. Упражнение - проверьте функциональность.
  4. Проверьте ожидания - убедитесь, что правильные методы были вызваны в mock.
  5. Проверить состояние - использовать утверждения для проверки состояния объекта.
  6. Teardown - очистить ресурсы.

Резюме

Оба теста mocks и stubs дают ответ на вопрос: Каков результат?

Тестирование с помощью mocks также интересует: How результат был достигнут?

0
задан Sazzadur Rahman 15 January 2019 в 15:32
поделиться

1 ответ

Хорошо, я нашел рабочее решение для этого. Вот мое решение.

Я изменил forms.py следующим образом

from django import forms
from accounts.tasks import send_mail
from django.contrib.auth.forms import PasswordResetForm as PasswordResetFormCore


class PasswordResetForm(PasswordResetFormCore):
    email = forms.EmailField(max_length=254, widget=forms.TextInput(
        attrs={
            'class': 'form-control',
            'id': 'email',
            'placeholder': 'Email'
        }
    ))

    def send_mail(self, subject_template_name, email_template_name, context, 
                  from_email, to_email, html_email_template_name=None):
        context['user'] = context['user'].id

        send_mail.delay(subject_template_name=subject_template_name, 
                        email_template_name=email_template_name,
                        context=context, from_email=from_email, to_email=to_email,
                        html_email_template_name=html_email_template_name)

И измененный tasks.py похож на следующий

from __future__ import absolute_import, unicode_literals
from accounts.models import User
from django.contrib.auth.forms import PasswordResetForm


@shared_task
def send_mail(subject_template_name, email_template_name, context,
              from_email, to_email, html_email_template_name):
    context['user'] = User.objects.get(pk=context['user'])

    PasswordResetForm.send_mail(
        None,
        subject_template_name,
        email_template_name,
        context,
        from_email,
        to_email,
        html_email_template_name
    )
0
ответ дан Sazzadur Rahman 15 January 2019 в 15:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: