Pytest-django: `mail.outbox` рд╕реЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 10 рдЕрдкреНрд░реИрд▓ 2018  ┬╖  14рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: pytest-dev/pytest-django

рдЕрд░реЗ рд╡рд╣рд╛рдБ, pytest-django рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рд╕рднреА рдХрдбрд╝реА рдореЗрд╣рдирдд рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░реЗрдВ, рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЗрд╕реЗ рдХрдИ рдмрд╛рд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рд╣реИред

рд╣рдо рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рд░реЛрдбрд╝рд╛ рдореЗрдВ рднрд╛рдЧ рд░рд╣реЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рд╣рдордиреЗ рдХреБрдЫ рдЪреАрдЬреЛрдВ рдХреЛ рдЕрдкрдЧреНрд░реЗрдб рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдЕрдЪрд╛рдирдХ mail.outbox рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рджреМрд░рд╛рди рдИрдореЗрд▓ рдХреЛ рдмрд░рдХрд░рд╛рд░ рдирд╣реАрдВ рд░рдЦ рд░рд╣рд╛ рд╣реИред рдореИрдВрдиреЗ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ mailoutbox рд╕реНрдерд┐рд░рддрд╛ рдХрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдП рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдкрд░реЗрд╢рд╛рдиреА рд╣реЛ рд░рд╣реА рд╣реИред

рдЕрднреА рд╣рдо рдПрдХ рдХрдХреНрд╖рд╛ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдореИрдВрдиреЗ mailoutbox рд╕реНрдерд┐рд░рддрд╛ рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИред рдпрд╛рдиреА рдореИрдВрдиреЗ рдЖрдИрдПрдирдЖрдИ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛:

[pytest]
usefixtures = mailoutbox

рдмрд┐рд▓реНрдХреБрд▓ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЙрд╕ рд╕реНрдерд┐рд░рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВрдиреЗ рдЕрдкрдиреА рдХрдХреНрд╖рд╛ рдХреЗ рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реНрдерд┐рддреАрдп рддрд░реНрдХ mailoutbox рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛, рдлрд┐рд░ рднреА рдЗрд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИ .. рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдореБрдЭреЗ рдХреБрдЫ рдЖрд╕рд╛рди рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИред

рд╕рд╣реА рджрд┐рд╢рд╛ рдореЗрдВ рдПрдХ рдзрдХреНрдХрд╛ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░реЗрдВрдЧреЗ - рдФрд░ рдлрд┐рд░, рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж!

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдкрд░реАрдХреНрд╖рдг рдХреЛ рдПрдХ рдореВрд▓ рдИрдореЗрд▓ рднреЗрдЬрдиреЗ рдФрд░ рдЗрд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЪрд▓рд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛:

def test_reset_password(mailoutbox, db, settings):
    text_message = render_to_string('emails/password_reset/password_reset_successful.txt',
                                    context={})
    html_message = render_to_string('emails/password_reset/password_reset_successful.html',
                                    context={})
    subject = render_to_string('emails/password_reset/password_reset_successful_subject.txt',
                               context={})

    email = EmailMultiAlternatives(
        subject=subject,
        body=text_message,
        from_email="[email protected]",
        to=['[email protected]']
    )

    if html_message:
        email.attach_alternative(html_message, "text/html")
    email.send()

    print(settings.EMAIL_BACKEND)

    assert len(mailoutbox) == 1
>       assert len(mailoutbox) == 1
E       assert 0 == 1
E        +  where 0 = len([])

accounts/tests/api/test_reset_password.py:200: AssertionError
----------------------------------------------- Captured stdout call ------------------------------------------------
django.core.mail.backends.locmem.EmailBackend
--------------------------------------------- Captured stdout teardown ----------------------------------------------

рдЕрдм рдЕрдЪреНрдЫрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдореИрдВ db рд╕реНрдерд┐рд░рддрд╛ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реВрдВ, рддреЛ рдкрд░реАрдХреНрд╖рдг рдкрд╛рд╕ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЕрдкрдиреА django_db_setup рдкрджреНрдзрддрд┐ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдХреЛрдИ рдлрд╛рдпрджрд╛ рдирд╣реАрдВ рд╣реБрдЖ ...

рдореИрдВ рдЗрд╕ рд╕рдордп рдлрдВрд╕ рдЧрдпрд╛ рд╣реВрдБред

рд╕рднреА 14 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рджреЗрдЦреЗрдВ https://github.com/pytest-dev/pytest-django/blob/5da0935731d71aa347c57cd1753f51e3ba9f32d5/docs/helpers.rst#clearing -of-mailoutbox (7aee367)ред
(рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ)

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдкрд░реАрдХреНрд╖рдг рдХреЛ рдПрдХ рдореВрд▓ рдИрдореЗрд▓ рднреЗрдЬрдиреЗ рдФрд░ рдЗрд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЪрд▓рд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛:

def test_reset_password(mailoutbox, db, settings):
    text_message = render_to_string('emails/password_reset/password_reset_successful.txt',
                                    context={})
    html_message = render_to_string('emails/password_reset/password_reset_successful.html',
                                    context={})
    subject = render_to_string('emails/password_reset/password_reset_successful_subject.txt',
                               context={})

    email = EmailMultiAlternatives(
        subject=subject,
        body=text_message,
        from_email="[email protected]",
        to=['[email protected]']
    )

    if html_message:
        email.attach_alternative(html_message, "text/html")
    email.send()

    print(settings.EMAIL_BACKEND)

    assert len(mailoutbox) == 1
>       assert len(mailoutbox) == 1
E       assert 0 == 1
E        +  where 0 = len([])

accounts/tests/api/test_reset_password.py:200: AssertionError
----------------------------------------------- Captured stdout call ------------------------------------------------
django.core.mail.backends.locmem.EmailBackend
--------------------------------------------- Captured stdout teardown ----------------------------------------------

рдЕрдм рдЕрдЪреНрдЫрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдореИрдВ db рд╕реНрдерд┐рд░рддрд╛ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реВрдВ, рддреЛ рдкрд░реАрдХреНрд╖рдг рдкрд╛рд╕ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЕрдкрдиреА django_db_setup рдкрджреНрдзрддрд┐ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдХреЛрдИ рдлрд╛рдпрджрд╛ рдирд╣реАрдВ рд╣реБрдЖ ...

рдореИрдВ рдЗрд╕ рд╕рдордп рдлрдВрд╕ рдЧрдпрд╛ рд╣реВрдБред

рдореИрдВ рдпрд╣ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рднреВрд▓ рдЧрдпрд╛ рдХрд┐ рдЙрд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдХреБрдЫ рдкрд░реАрдХреНрд╖рдг рд╣реИрдВ, рдЬрд╣рд╛рдВ mailoutbox рд╕реНрдерд┐рд░рддрд╛ рдХрд╛рдо рдХрд░рддреА рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЙрди рдкрд░реАрдХреНрд╖рдгреЛрдВ рдФрд░ рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдХреЗ рдмреАрдЪ рдХреЛрдИ рдЕрдВрддрд░ рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред
рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдПрдХрдорд╛рддреНрд░ рдЕрдВрддрд░ рдкрд░реАрдХреНрд╖рдг рд╕рдорд╛рд░реЛрд╣ рдореЗрдВ mailoutbox рддрд░реНрдХ рдХреА рд╕реНрдерд┐рддрд┐ рд╣реИред рдпрджрд┐ рдпрд╣ рдХрд┐рд╕реА рднреА рд╕реНрдерд┐рд░рддрд╛ рд╕реЗ рдкрд╣рд▓реЗ рд╣реИ рдЬреЛ db рд╕реНрдерд┐рд░рддрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рддреЛ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВ рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рд░рдЦрддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдПрдХ рдХрд╛рдордХрд╛рдЬ рдорд┐рд▓рд╛ред

рдореИрдВ рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдо рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ pytest-django==3.33 . рдХреЗ рд╕рд╛рде рднреА рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ

@bogdanpetrea
рдЬрд╛рдВрдЪ/рдЕрдкрдбреЗрдЯ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
рдЗрд╕реЗ рдбрд┐рдмрдЧрд┐рдВрдЧ/рдлрд┐рдХреНрд╕ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдорджрджрдЧрд╛рд░ рд╣реЛрдЧрд╛ред

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рд╣реИ рдХрд┐ mail.outbox рдкрд╣рд▓реЗ рд╕реНрдерд╛рди рдкрд░ рд╕реЗрдЯ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рддреНрд░реБрдЯрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ - рд▓реЗрдХрд┐рди рдпрд╣ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЛ рдмрджрд▓рдиреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ рдЬрдмрдХрд┐ pytest-django рд╕реНрдкрд┐рди рдЕрдк рдХрд░рддрд╛ рд╣реИред
рд╕рдВрджрд░реНрдн: https://github.com/pytest-dev/pytest-django/pull/708

рдореБрдЭреЗ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдХрд┐ рдореЗрд▓рдЖрдЙрдЯрдмреЙрдХреНрд╕ рдЦрд╛рд▓реА рдирд╣реАрдВ рд╣реИ :(
рдпрд╣ рдирд╡реАрдирддрдо рдкрд░реАрдХреНрд╖рдг рдлрд╝рдВрдХреНрд╢рди рддрд░реНрдХ рд╣реИред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореИрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░реАрдХреНрд╖рдг рдХреЛрдб рд╕реЗ рдкрд╣рд▓реЗ mailoutbox.clear() рдХреЛ рд╡рд░реНрдХ-рдП-рд░рд╛рдЙрдВрдб рдХреЗ рд░реВрдк рдореЗрдВ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реВрдВред

@jedie
рдХреНрдпрд╛ рдЖрдк рдПрдХ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдкрд░реАрдХреНрд╖рдг рдХреЗрд╕ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? pytest-django рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд╕рдлрд▓ рдкрд░реАрдХреНрд╖рдг рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред

#ренрежрео рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд? (рдпрд╛рдиреА рдЙрд╕ рдХреЛрдб рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдкреНрд░рд╣рд╛рд░ рдХрд░реЗрдВ рдЬрд┐рд╕реЗ рд╡рд╣ рд╡рд╣рд╛рдВ рдЫреВрддрд╛ рд╣реИ)

рдореИрдВрдиреЗ рдПрдХ рдЫреЛрдЯрд╛ рдкрд░реАрдХреНрд╖рдг рдХреЗрд╕ рдмрдирд╛рдпрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ (рдХрдо рд╕реЗ рдХрдо рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдореИрдВ рдЗрд╕рдХрд╛ рдЕрдиреБрднрд╡ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ): https://github.com/pytest-dev/pytest-django/compare/master...koniiiik :589- mailoutbox-is-not-django-core-mail-outbox?expand=1

рдореИрдВрдиреЗ mailoutbox рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд╕реЗ mailoutbox.clear() рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ mailoutbox рдФрд░ mail.outbox рджреЛрдиреЛрдВ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рднреА рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред рдпрджрд┐ mailoutbox is mail.outbox , рддреЛ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдХреЛрдб рдЪрд▓рд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЖрдЙрдЯрдмреЙрдХреНрд╕ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рддрдм рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдИрдореЗрд▓ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реЛрддрд╛ рд╣реИ (IE 1 рдИрдореЗрд▓ рдХрд╣рддреЗ рд╣реИрдВ)ред

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕ рдореБрджреНрджреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди mailoutbox рд╕реНрдерд┐рд░рддрд╛ рдореЗрд░реЗ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ mail.outbox рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреАред рдпрд╣ рднреЗрдЬреЗ рдЧрдП рдИрдореЗрд▓ рдПрдХрддреНрд░ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ:

(Pdb) mail.outbox
[<django.core.mail.message.EmailMultiAlternatives object at 0x7f6d864cb198>]
(Pdb) mailoutbox
[]
(Pdb)

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕ рдореБрджреНрджреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди mailoutbox рд╕реНрдерд┐рд░рддрд╛ рдореЗрд░реЗ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ mail.outbox рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреАред рдпрд╣ рднреЗрдЬреЗ рдЧрдП рдИрдореЗрд▓ рдПрдХрддреНрд░ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ:

(Pdb) mail.outbox
[<django.core.mail.message.EmailMultiAlternatives object at 0x7f6d864cb198>]
(Pdb) mailoutbox
[]
(Pdb)

рд╡реИрд╕рд╛ рд╣реАред
mail.outbox рдореЗрдВ рдПрдХ рд╕рдВрджреЗрд╢ рд╣реИ рдЬрдмрдХрд┐ mailoutbox рдЦрд╛рд▓реА рд╣реИред
pytest-django рд╕рдВрд╕реНрдХрд░рдг 3.9.0 рд╣реИред

рдореЗрд░реЗ рд╕рд╛рде рднреА рд╡рд╣реА рджрд┐рдХреНрдХрдд рд╣реИред

рдЕрдЧрд░ рдореИрдВ рдЗрд╕ рддрд░рд╣ рдХреА рд╕реНрдерд┐рд░рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ:

def test_send_foo_mail(mailoutbox, user_client, foo):

рдЗрд╕ рддрд░рд╣ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

def test_send_foo_mail(user_client, foo, mailoutbox):

рдореБрдЭреЗ рдЗрд╕реЗ рдЦреЛрдЬрдиреЗ рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рд▓рдЧрд╛ред рдореИрдВ рдЗрд╕реЗ рдбреАрдмрдЧ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдореИрдВрдиреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рджреЗрдЦрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдХреЛрдИ рд╕реБрд░рд╛рдЧ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рдбрд┐рдмрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПред

рд╕рдВрдмрдВрдзрд┐рдд: https://stackoverflow.com/questions/66846621/mailoutbox-works-only-if-last-fixture

рдкрд┐рдЫрд▓реЗ рдХрдореЗрдВрдЯреЗрдЯрд░ рдХреЗ рд╕рдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдЕрдиреБрднрд╡ рдХрд░рдирд╛ред рдЗрд╕ рддрд░рд╣ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ:

def test_command_and_email(
    mailoutbox, argument, time_machine, mocker 
):

рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВ рдЗрд╕реЗ рдЕрдВрддрд┐рдо рд╕реНрдерд╛рди рдкрд░ рд░рдЦреВрдВ рддреЛ рд╕рдм рдХреБрдЫ рдЕрдкреЗрдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

def test_command_and_email(
    argument, time_machine, mocker, mailoutbox
):

рддрд░реНрдХ argument рднреА рдПрдХ рд╕реНрдерд┐рд░рддрд╛ рд╣реИ рдЬреЛ db рд╕реНрдерд┐рд░рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдореБрдЦреНрдп рдХрд╛рд░рдг рд╣реИред
рдореИрдВ pytets-django 4.3.0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

rlskoeser picture rlskoeser  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

dan-passaro picture dan-passaro  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

blueyed picture blueyed  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

scherrey picture scherrey  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

tolomea picture tolomea  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ