Тестовая среда Yii2 BaseMailer не сохраняется или не отправляется - PullRequest
0 голосов
/ 06 сентября 2018

Я запускаю несколько юнит-тестов, один из тестов проверяет, что электронные письма генерируются и отправляются.

Я проверил документы, чтобы заставить Yii сохранять электронные письма в файл, а не отправлять. Я настроил компонент mailer следующим образом:

'mailer' => [
        'class' => 'yii\swiftmailer\Mailer',
        'viewPath' => '@common/mail',
        // send all mails to a file by default. You have to set
        // 'useFileTransport' to false and configure a transport
        // for the mailer to send real emails.
        'useFileTransport' => true
    ],

При выполнении тестов я вижу сообщение Yii::info от функции BaseMailer send().

[yii \ mail \ BaseMailer :: send] 'Отправка электронного письма с уведомлением о платёжном поручении на адрес test@test.co.uk

Однако электронное письмо нигде не сохраняется, должно быть runtime/mail, оно также никуда не отправляется.

Я попытался установить useFileTransport во время выполнения, используя:

$mailer = Yii::$app->mailer;
$mailer->useFileTransport = true;
$mailer->composer... 

Но ничего не меняется, любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Codeception переопределяет настройки вашей почтовой программы ( [1] [2] ) для использования настраиваемой почтовой программы , которая ничего не отправляет и не сохраняет. Это имеет смысл - вы не хотите отправлять кучу писем во время тестирования.

Вы можете использовать пользовательские утверждения или методы Codeception для проверки отправленных электронных писем:

$I->seeEmailIsSent(3); // Test that three emails was sent

$messages = $I->grabSentEmails();
$I->assertEquals('admin@site,com', $messages[0]->getTo()); 
0 голосов
/ 06 сентября 2018

Глядя на документы, yii\mail\BaseMailer::useFileTransport Если этот параметр включен, этот параметр принудительно сохраняет данные почтовых сообщений в локальные файлы вместо обычной отправки. Эти файлы будут сохранены в yii\mail\BaseMailer::fileTransportPath, что по умолчанию равно @runtime/mail.

Так что проверьте ваши права доступа к каталогу, если они в порядке, вы можете изменить его на любой другой каталог, который, как вам известно, не будет иметь проблем с правами доступа, используя fileTransportPath.

'mailer' => [
        'class' => 'yii\swiftmailer\Mailer',
        'viewPath' => '@common/mail',
        // send all mails to a file by default. You have to set
        // 'useFileTransport' to false and configure a transport
        // for the mailer to send real emails.
        'useFileTransport' => true,
        'fileTransportPath'=>'your/path',
    ],
...