Cake\Mailer\Mailer
などでメール送信を行っている際にTestで実メールを送らない方法を調べた。mb_send_mailとか使ってる場合は当てはまらない。
mock化する場合
- https://qiita.com/ran/items/85e39821f856deb537a4
- https://qiita.com/kazumeat/items/2e7dd2d4962bed44715c
正攻法だがちょっと大変
EmailTransportをDebugTransportにする
class HogeTest extends IntegrationTestCase
{
public function setUp()
{
parent::setUp();
// 一度dropしないと設定できない
// config/app.phpでEmailやEmailTransportの設定を確認して使用中のものを引数で渡す
\Cake\Mailer\Email::dropTransport('default');
\Cake\Mailer\Email::setConfigTransport('default', [
'className' => 'Debug',
]);
}
// ...
}
setUp()
に書けばクラス全体、個別testメソッドに書けばそこだけ反映される。 tests/bootstrap.php
にも書ける。cakephp-3.3.16 で確認。