跳转到主要内容

用于与Plone的集成测试

项目描述

简介

collective.MockMailHost 允许对 Plone 的邮件功能进行集成测试。只需将此 egg 添加到您的 [test] 运行器部分,并通过您的 LayerTestCase 安装此产品。

注意

此产品仅限测试目的,请不要在您的运行中的 Plone 站点上使用。它用 Mock MailHost 替换了标准 MailHost,您可以用它来检查邮件内容和收件人。

已与 Plone 4 进行测试,但应也能与早期版本兼容。

集成

以下示例展示了如何基于 plone.app.testingcollective.MockMailHost 集成到您的测试设置中。将此包添加到您的包的 setup.py 文件中的 extras_requires 部分,以便 buildout 会自动为您下载此包。

setup(name='my.package',
      ...
      extras_require={
        'test': [
            'plone.app.testing',
            'collective.MockMailHost',
        ]
      },
      ...
      )

您的测试层设置可能如下所示

from plone.app.testing import helpers, layers
from plone.testing import z2


class MyLayer(helpers.PloneSandboxLayer):
    defaultBases = (layers.PLONE_FIXTURE, )

    def setUpZope(self, app, configurationContext):
        # Load zcml
        import collective.MockMailHost
        self.loadZCML(package=collective.MockMailHost)

        # Install product and call its initialize() function
        z2.installProduct(app, 'collective.MockMailHost')

        # Note: you can skip this if my.product is not a Zope 2-style
        # product, i.e. it is not in the Products.* namespace and it
        # does not have a <five:registerPackage /> directive in its
        # configure.zcml.

    def tearDownZope(self, app):
        # Uninstall product
        z2.uninstallProduct(app, 'collective.MockMailHost')

        # Note: Again, you can skip this if my.product is not a Zope 2-
        # style product

    def setUpPloneSite(self, portal):
        helpers.quickInstallProduct(portal, 'collective.MockMailHost')

        helpers.applyProfile(portal, 'collective.MockMailHost:default')

MY_FIXTURE = MyLayer()

使用成员发帖论坛

>>> from Products.CMFCore.utils import getToolByName
>>> from Products.MailHost.interfaces import IMailHost
>>> from zope.component import getUtility
>>> app = layer['app']
>>> portal = layer['portal']

测试在默认成员发帖论坛中开始对话、回复和修改评论。

记录所有异常,这对调试很有用。另外,清除小部件槽位,以减少测试浏览器被如最近的小部件和导航树之类的事物困惑。

>>> portal.error_log._ignored_exceptions = ()
>>> portal.left_slots = portal.right_slots = []
>>> workflow = portal.portal_workflow

验证邮件主机替换

>>> portal.MailHost
<collective.MockMailHost.MockMailHost.MockMailHost object at ...>
>>> getToolByName(portal, 'MailHost')
<collective.MockMailHost.MockMailHost.MockMailHost object at ...>
>>> getUtility(IMailHost)
<collective.MockMailHost.MockMailHost.MockMailHost object at ...>

发送邮件

>>> to_ = "member@example.com"
>>> from_ = "admin@example.com"
>>> msg = """
...
... Dear Sir:
...
... Thank you"""
>>> portal.MailHost.send(msg, to_, from_)
>>> len(portal.MailHost.messages)
1
>>> b'To: member@example.com' in portal.MailHost.messages[0]
True
>>> b'From: admin@example.com' in portal.MailHost.messages[0]
True
>>> b'Dear Sir:' in portal.MailHost.messages[0]
True
>>> portal.MailHost.messages_from
['admin@example.com']
>>> portal.MailHost.messages_to
[['member@example.com']]
>>> portal.MailHost.reset()
>>> len(portal.MailHost.messages)
0

发送一个带有 cc/bcc 收件人的 email.message.EmailMessage 对象

>>> from email.message import EmailMessage
>>> msg = EmailMessage()
>>> msg["Subject"] = "Hello"
>>> msg["From"] = "me@example.com"
>>> msg["To"] = "you@example.com"
>>> msg["Cc"] = "foo@example.com"
>>> msg["Bcc"] = "bar@example.com"
>>> msg.set_content("""
... This message is for you, foo, and bar.
... """)
>>> portal.MailHost.send(msg)
>>> len(portal.MailHost.messages)
1
>>> b'To: you@example.com' in portal.MailHost.messages[0]
True
>>> b'From: me@example.com' in portal.MailHost.messages[0]
True
>>> b'Cc: foo@example.com' in portal.MailHost.messages[0]
True
>>> b'bar@example.com' in portal.MailHost.messages[0]
False
>>> b'This message is for you, foo, and bar.' in portal.MailHost.messages[0]
True
>>> len(portal.MailHost.messages)
1
>>> portal.MailHost.messages_from
['me@example.com']
>>> portal.MailHost.messages_to
[['you@example.com', 'foo@example.com', 'bar@example.com']]
>>> portal.MailHost.reset()
>>> len(portal.MailHost.messages)
0

变更日志

3.0.0 (2024-04-23)

重大变更

  • 移除对 Python 3.7 之前版本和 Plone 5.2 之前版本的支持。[mamico]

新功能

  • 添加 messages_frommessages_to 记录发送者和收件人。这对于测试消息中不存在 bcc 很有用。[mamico]

错误修复

  • 在此添加条目

2.0.0 (2018-11-06)

重大变更

  • 不再依赖于旧的 SecureMailHost。[pbauer]

新功能

  • 支持 Python 3。[pbauer]

1.1.0 (2018-06-27)

  • 修复导入位置,已经删除 Globals。[gforcada]

  • 重构测试设置。[gforcada]

1.0 (2016-01-25)

  • 修复 MIMEText 兼容性(自 0.9 版以来已损坏)。[jone]

0.9 (2015-07-10)

  • 在发送前清理 msg。否则 Plone 自注册邮件将无法工作 [sureshvv]

0.8 (2015-06-13)

  • 添加浏览器视图进行功能测试 [Casecarsid]

0.7 (2013-07-05)

  • MANIFEST [sureshvv]

0.6 (2013-07-03)

  • 跟踪 msg_type。[sureshvv]

  • 使 MockMailHost 更像 collective.testcaselayer 的 MockMailHost。[saily]

  • 更新文档 [saily]

0.5 - 2012-09-25

  • 从 setup.py 中移除 ZopeSkel 和 Paster 依赖 [saily]

  • 迁移到 github 并更改到 README.rst,修改 setup.py 中的链接 [saily]

  • 允许 MockMailHost 类中的 send 和 secureSend 方法有多个参数。[saily]

0.4 (2011-05-17)

  • 在 SiteManager 中注册 MockMailHost,以便在使用 getToolByName(context, 'MailHost')getUtility(IMailHost) 时获取 MockMailHost。[saily]

  • 从 SimpleItem 继承而不是从 MailHost 继承。[saily]

  • 实现 secureSend 方法。[saily]

0.3 (2011-04-04)

  • **kwargs 添加到 MockMailHost 的 send 方法,以支持 mto、mfrom 等关键字参数,就像默认 MailHost 一样。[saily]

  • 添加用于设置各种处理器的通用设置文件。[sureshvv]

0.2 (2010-05-21)

  • 添加测试 [sureshvv]

0.1 (2010-05-16)

  • 初始版本 [sureshvv]

项目详情


下载文件

下载适用于您平台文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源分布

collective.MockMailHost-3.0.0.tar.gz (19.6 kB 查看哈希值)

上传时间

构建分布

collective.MockMailHost-3.0.0-py2.py3-none-any.whl (12.5 kB 查看哈希值)

上传时间 Python 2 Python 3

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面