首页 > 解决方案 > ReflectionException:类邮件程序不存在

问题描述

如果我\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: Class mailer 不存在

/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');
});

我按照这里的建议检查了Illuminate\Mail\MailServiceProvider::class它在 app.php 中,我还按照这里的建议执行一个composer update然后。composer dump-autoload

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

标签: phplaravel

解决方案


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

use Illuminate\Support\Facades\Mail;

Mail::fake()但是,在您的测试走得太远之前,请检查一下邮件伪造能力 ( )。

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


推荐阅读