如果我在测试类中使用\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::class
和composer update
。
任何想法为什么会引发此错误?
答案 0 :(得分:1)
在测试类中,我认为您需要首先使用use语句指定Mail类:
use Illuminate\Support\Facades\Mail;
但是在进行过多测试之前,请先检查邮件伪造功能(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调用也会失败。
可能不是导致此错误的普遍原因,但希望这对某人有用。