在Django项目上测试cron作业的工具

时间:2017-01-27 05:21:59

标签: django

在使用answer时,我在Django项目上创建了一个cron作业。实际上,我已经实现了一个代码,允许每个客户端发送一封自动发送电子邮件给他们的生日。当我想测试代码时,我的问题就出现了。

有人能告诉我要测试此代码需要做些什么吗?有哪些工具可以进行这种测试?

Freezegun是一个很好的解决方案吗?如果是这样,我怎么能用它?

1 个答案:

答案 0 :(得分:1)

首先在您的设置文件中,设置要输出到文件的电子邮件

EMAIL_BACKEND = 'django.core.mail.backends.filebased.EmailBackend'
EMAIL_FILE_PATH = '/tmp/app-messages' # change this to a proper location

然后设置单元测试以调用管理命令并检查文件中的电子邮件地址。像这样的东西

from django.core.management import call_command
from django.test import TestCase
from django.utils import timezone


class BirthdayTests(TestCase):
    def setUp(self):
        self.owner_first_name = "Gumdrop"
        self.owner_last_name = "Goodie"
        self.bb_email = "goodie@gumdrop.com"
        my_birthday_boy_user = User(username=self.owner_first_name.lower(),
                                    first_name=self.owner_first_name,
                                    last_name=self.owner_last_name,
                                    email=self.bb_email)

        my_birthday_boy_person = Person(user=my_birthday_boy_user, birthday=timezone.now().date())
        my_birthday_boy_person.save()


    def test_brithday_boy_emailed():
        call_command('your_management_command')

        mail_file = open('/tmp/app-messages', 'r')
        self.assertTrue(self.bb_email in mail_file.read())

然后用

运行测试
$ ./manage.py test <YOUR APP NAME>

请记住在设置文件中重新设置电子邮件,或使用特殊设置文件进行测试,并在测试时使用--settings开关。