2016-12-06 84 views
0

对于我们的项目,我们使用用于电子邮件的定制包。这个软件包包含结构是这样的: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邮件服务?

请让我知道如果你需要任何额外的信息

回答

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> 

您应该可以为您的邮件收集器配置或您想要测试的任何其他配置添加任何其他env变量。