ReflectionException:类邮件程序不存在

时间:2019-01-11 18:03:51

标签: php laravel

如果我在测试类中使用\mail,Laravel 5.7会告诉我mailer类不存在。

这是我的测试功能:

/**
     * A basic test example.
     *
     * @return void
     */
    public function testBasicTest()
    {
      \Mail::raw('Hello world', function($message){
        $message->to('foo@bar.com');
        $message->from('bar@foo.com');
      });

    }

在终端中输入phpunit时会发生这种情况:

  

1)Tests \ Feature \ ExampleTest :: testBasicTest ReflectionException:类   邮递员不存在

     

/home/www/testmachine/vendor/laravel/framework/src/Illuminate/Container/Container.php:779   /home/www/testmachine/vendor/laravel/framework/src/Illuminate/Container/Container.php:658   /home/www/testmachine/vendor/laravel/framework/src/Illuminate/Container/Container.php:609   /home/www/testmachine/vendor/laravel/framework/src/Illuminate/Foundation/Application.php:735   /home/www/testmachine/vendor/laravel/framework/src/Illuminate/Container/Container.php:1222   /home/www/testmachine/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php:175   /home/www/testmachine/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php:144   /home/www/testmachine/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php:231   /home/www/testmachine/tests/Feature/ExampleTest.php:14

但是,当我在应用程序中的其他地方使用邮件时,它可以工作,例如在Route.php中使用

Route::get('/test', function(){
  \Mail::raw('Hello world', function($message){
    $message->to('foo@bar.com');
    $message->from('bar@foo.com');
  });
  dd('hi');
});

我根据建议here检查了{。{1}}是否在app.php中,并且我也按照建议的here执行了Illuminate\Mail\MailServiceProvider::classcomposer update

任何想法为什么会引发此错误?

3 个答案:

答案 0 :(得分:1)

在测试类中,我认为您需要首先使用use语句指定Mail类:

use Illuminate\Support\Facades\Mail;

但是在进行过多测试之前,请先检查邮件伪造功能(Mail::fake())。

https://laravel.com/docs/5.7/mocking#mail-fake

答案 1 :(得分:0)

要模拟邮件,只需检查以下文档:

https://laravel.com/docs/5.7/mocking#mail-fake

但是对于发送实际邮件,您可以使用由laracasts编写的MailTrap测试类

https://github.com/laracasts/Behat-Laravel-Extension#service-mailtrap

答案 2 :(得分:0)

composer dump-autoload期间,我也遇到了此错误。事实证明,我的代码中某个地方存在一个简单的语法错误,并且我还设置了一个异常处理程序,该异常处理程序可在网站上引发错误时向我发送一封电子邮件。

我认为发生的是,在composer dump-autoload期间,遇到语法错误时Composer并未构建其autoload文件,因此当这触发了给我的电子邮件时,{{1} }即使使用正确的Mail语句,facade调用也会失败。

可能不是导致此错误的普遍原因,但希望这对某人有用。