Phpunit邮件测试。找不到有效的方法

Phpunit mail testing. Can't find efficient way

对于我们的项目,我们使用的是用于电子邮件的自定义包。这个包包含这样的结构:

class Mail 
{
    public function send($data, $view)
    {
        //some logic here

        return with(new Mailgun($this->key))->sendMessage($data);
    }
}

class Message extends Mail 
{

    public function passwordReset($data, $view)
    {
        return $this->send($data, 'viewFile1');
    }

    public function activate()
    {
        return $this->send($data, 'viewFile2');
    }

}

之前我的测试是这样的:

public function testPasswordReset()
{
    $data = new User(5);
    $rv = with(new Message)->activate($data, 'view');

    $this->assertEqual($rv, 200);
}

但是由于我们决定电子邮件不应发送任何真实数据,所以我迷路了。

我看过一些教程,这些服务如何像 MailCatcher,我对此有所了解,但是:

当结果始终为 http 状态时,如何测试包背后的逻辑?

如何测试包中的非 smtp 邮件服务?

如果您需要任何其他信息,请告诉我

我发现 mailcatcher 是最好的解决方案。您只能通过编辑 phpunit.xml 来为测试目的设置自定义环境变量。您应该会看到以下几行。

    <php>
        <env name="APP_ENV" value="testing"/>
        <env name="CACHE_DRIVER" value="array"/>
        <env name="SESSION_DRIVER" value="array"/>
        <env name="QUEUE_DRIVER" value="sync"/>
    </php>

您应该能够为您的 mailcatcher 配置或您想要测试的任何其他配置添加任何额外的环境变量。

我在 phpunit 配置文件中将邮件驱动程序设置为 file。然后我可以获取结果电子邮件值并进行比较。