0

私は自分の django プロジェクトで unitest を使い始めました。テストに興味がありますprocess_email()。メール機能をテストしているので、機能のテストに興味がありparse_email()ます。以下のこのコードは、コマンド ライン管理機能です (つまり、私は python manage.py process_email を実行します)。

parse_email()unittest で呼び出すにはどうすればよいですか?

このコードは というファイルにあるためsomemodel/management/commands/process_email.py、 のみprocess_email()が表示されます。その後、call_command('parse_email', mail.outbox[1].body, interactive=False)のみprocess_email()が表示されるため、機能しません。

def process_email():
    server = imaplib.IMAP4_SSL(settings.EMAIL_HOST,993)
    server.login(settings.EMAIL_HOST_USER, settings.EMAIL_HOST_PASSWORD)
    server.select('INBOX')
    status, data = server.search(None, 'NOT', 'DELETED')

    if data:
        msgnums = data[0].split()

        for num in msgnums:
            status, data = server.fetch(num, '(RFC822)')
            valid = parse_email(data[0][1])
            print "valid is ", valid
            #            if not valid:
            server.store(num, '+FLAGS', '\\Deleted')

    server.expunge()
    server.close()
    server.logout()

def parse_email(message):
    # 'message' must be an RFC822 formatted message.
    pdb.set_trace()
    try:
        msg = message   
        message = email.message_from_string(msg)
        subject = message.get('subject', _('Created from e-mail'))
        subject = decode_mail_headers(decodeUnknown(message.get_charset(), subject))
        subject = subject.replace("Re: ", "").replace("Fw: ", "").replace("RE: ", "").replace("FW: ", "").strip()

表示されないと言うときの意味は次のとおりです (おそらく言葉の使い方が間違っています):call_command('parse_email')テスト ファイルを呼び出すと、次のエラーが表示されます。

======================================================================
ERROR: test_submit_bldg (bldg.tests.SimpleTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/bldg/tests.py", line 36, in test_submit_bldg
      print call_command('parse_email') 
  File "django/core/management/__init__.py", line 136, in call_command
  raise CommandError("Unknown command: %r" % name)
  CommandError: Unknown command: 'parse_email'
4

1 に答える 1

1

テストから直接インポートできparse_emailます。

from somemodel.management.commands.process_email import parse_email
assert_equals(parse_email("..."), ...)
于 2012-06-09T07:00:49.733 に答える