对于我们的项目,我们使用的是用于电子邮件的自定义包。这个包包含这样的结构:
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邮件服务?
如果您需要任何其他信息,请与我们联系
答案 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
。然后,我可以获取结果电子邮件值并进行比较。