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

时间:2016-12-06 18:04:12

标签: laravel email phpunit

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

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邮件服务?

如果您需要任何其他信息,请与我们联系

2 个答案:

答案 0 :(得分:1)

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

    <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配置或您要测试的任何其他配置添加任何其他env变量。

答案 1 :(得分:0)

我已经在phpunit配置文件中将Mail driver设置为file。然后,我可以获取结果电子邮件值并进行比较。