2017-05-03 7 views
2

IntegrationTestCaseクラスが提供するget()/posts()メソッドを使用して電子メールを送信するアクションのテストを作成しようとしています。CakePHP 3.4:テスト専用の電子メールトランスポートを設定する

$this->getMailer('User') 
    ->set('someVarName', 'someVarValue) 
    ->send('forgotPassword', [$user]); 

通常、このコードは動作します:

コードは次のようなものです。

しかし、テストによって、私はこのエラーを取得する:

1) MeCms\Test\TestCase\Controller\UsersControllerTest::testForgotPassword 
BadMethodCallException: Cannot send email, transport was not defined. Did you call transport() or define a transport in the set profile? 

/home/mirko/Libs/Plugins/MeCms/vendor/cakephp/cakephp/src/Mailer/Email.php:2049 
/home/mirko/Libs/Plugins/MeCms/vendor/cakephp/cakephp/src/Mailer/Mailer.php:252 
/home/mirko/Libs/Plugins/MeCms/src/Controller/UsersController.php:213 
/home/mirko/Libs/Plugins/MeCms/vendor/cakephp/cakephp/src/Controller/Controller.php:440 
/home/mirko/Libs/Plugins/MeCms/vendor/cakephp/cakephp/src/Http/ActionDispatcher.php:119 
/home/mirko/Libs/Plugins/MeCms/vendor/cakephp/cakephp/src/Http/ActionDispatcher.php:93 
/home/mirko/Libs/Plugins/MeCms/vendor/cakephp/cakephp/src/Routing/Dispatcher.php:60 
/home/mirko/Libs/Plugins/MeCms/vendor/cakephp/cakephp/src/TestSuite/LegacyRequestDispatcher.php:61 
/home/mirko/Libs/Plugins/MeCms/vendor/cakephp/cakephp/src/TestSuite/IntegrationTestCase.php:426 
/home/mirko/Libs/Plugins/MeCms/vendor/cakephp/cakephp/src/TestSuite/IntegrationTestCase.php:360 
/home/mirko/Libs/Plugins/MeCms/tests/TestCase/Controller/UsersControllerTest.php:345 

私は少しを見てきたが、私は唯一のテストのためのトランスポートを設定する方法を理解していませんでした。

ありがとうございました。

答えて

0

私はこのような要件に遭遇していませんでしたが、以下のことが有効です。あなたの/tests/bootstrap.php

定数を定義するので、私たちは、テスト環境であるならば、我々が言うことができます:定数に対する/config/bootstrap.phpチェックで

define('_TEST', true); 
// important: define above requiring the /config/bootstrap.php 
require dirname(__DIR__) . '/config/bootstrap.php'; 

をデフォルトapp設定ファイルがロードされた後:

Configure::load('app', 'default', false); 

// load an additional config file `/config/app_testing.php` in testing environment 
if (defined('_TEST') && _TEST === true) { 
    Configure::load('app_tests'); 
} 

は、最後に設定ファイルを作成/config/app_tests.phpをテストし、デフォルトの設定値のいくつかを上書きする:

<?php 
return [ 
    'Email' => [ 
     'default' => [ 
      'transport' => 'gmail', 
      'log' => true 
     ] 
    ], 
    'EmailTransport' => [ 
     'gmail' => [ 
      'host' => 'ssl://smtp.gmail.com', 
      'port' => 465, 
      'username' => 'GoogleMailUserName', 
      'password' => 'GoogleMailPassword', 
      'className' => 'Smtp' 
     ] 
    ] 
]; 
関連する問題