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
。然后我可以获取结果电子邮件值并进行比较。
对于我们的项目,我们使用的是用于电子邮件的自定义包。这个包包含这样的结构:
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
。然后我可以获取结果电子邮件值并进行比较。