我有一个模型,我在post_save
信号中向用户发送电子邮件和短信,我多次创建模型,因此它多次发送电子邮件和短信。
我计划编写用于测试短信和电子邮件的新测试。
def send_activation_mail_sms(sender, instance, created, **kwargs):
if created :
mobile_activation = UserMobileActivation.objects.create(user=instance,randomword=randomword(50),ref=ref)
email_activation = UserEmailActivation.objects.create(user=instance,randomword=randomword(50),ref=ref)
url_email = "{0}view/v1/email/activation/{1}/".format(HOSTNAME,email_activation.randomword) short_url_email = url_shortener(long_url_email)
url_sms = "{0}view/v1/mobile/activation/{1}".format(HOSTNAME,mobile_activation.randomword)
app.send_task("apps.tasks.send_sms",
args=[TEXTLOCAL_APIKEY,mobile_activation.stockuser.user.username ,'TXTLCL','Activate your mobile here {0}'.format(url_sms)])
app.send_task("apps.tasks.send_email",
args=[email_activation.user.user.email, EMAIL_VERIFICATION_SUBJECT,
EMAIL_VERIFICATION_TEMPLATE, {"host": HOSTNAME, "verify_email_url": url_email}])
我在created
信号中传递了post_save
arg,有什么方法可以在这里传递额外的arg,这样在执行python manage.py test
时它将跳过发送短信和电子邮件的过程。我使用版本控制的一种方式是我想使用不同版本的API进行测试,但由于这里没有request
,因此我无法在此处捕获request.version
。请提出建议。
答案 0 :(得分:3)
首先在settings.py中设置一些变量,以标识当前正在使用的环境
# settings.py
MY_ENV = "DEVELOPMENT"
然后,根据 MY_ENV
from django.conf import settings
def send_activation_mail_sms(sender, instance, created, **kwargs):
if created and settings.MY_ENV == "DEVELOPMENT":
# do your stuff
Django提供了在测试过程中覆盖设置配置的功能,请参阅文档Override Settings。因此,您可以在测试本身中覆盖 MY_ENV
值