未发送预期的 [应用\邮件\欢迎电子邮件] 可邮寄邮件.断言 false 为真失败



我哪里犯了错误? 打击代码不适用于测试。 找到用户。不存在像用户空这样的问题。

错误消息是:

The expected [AppMailWelcomeEmail] mailable was not sent. Failed asserting that false is true.
at vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/MailFake.php:64
60|         }
61| 
62|         PHPUnit::assertTrue(
63|             $this->sent($mailable, $callback)->count() > 0,
> 64|             $message
65|         );
66|     }
67| 

测试类

class MailTest extends TestCase
{
/**
* A basic feature test example.
*
* @return void
*/
public function testWelcomeMail()
{
$this->withoutExceptionHandling();
Mail::fake();
Mail::assertSent(WelcomeEmail::class);
}
}

邮件类

class WelcomeEmail extends Mailable
{
use Queueable, SerializesModels;
public $data;
public function __construct($data)
{
$this->data = $data;
}
public function build()
{
$user = User::find(3425);
$address = 'myjourney@asdasd.com';
$subject = __('email.welcome_to_journey');
$name = __('email.my_journey');
if ($user != NULL) {
App::setLocale($user->lang);
$user->is_welcome_email_sent = 1;
$user->save();
}
return $this->view('email.user_welcome', ['user' => $user])
->from($address, $name)
// ->cc($address, $name)
// ->bcc($address, $name)
->replyTo($address, $name)
->subject($subject);
}
}

我可以处理其他测试文件,如登录、注册等,但邮寄没有。

您不会将电子邮件与其他凭据一起发送。你的函数应该看起来像这样

public function testWelcomeMail()
{
$this->withoutExceptionHandling();
Mail::fake();
Mail::to('<email_address>')->send(new WelcomeEmail(['user' => <some_number>]));
Mail::assertSent(WelcomeEmail::class);
}

邮件类

<?php
namespace AppMail;
use IlluminateBusQueueable;
use IlluminateContractsQueueShouldQueue;
use IlluminateMailMailable;
use IlluminateQueueSerializesModels;
class WelcomeEmail  extends Mailable implements ShouldQueue
{
use Queueable, SerializesModels;
public $data;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct($data)
{
$this->data = $data;
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return [
$this->to($this->data['emailTo']),
$this->subject($this->data['subject']),
$this->markdown('emails.forgotPassword', [
'message' => $this->data['message'],
])
];
}
}

测试用例

<?php
namespace TestsUnit;
use AppMailWelcomeEmail;
use TestsTestCase;
use IlluminateFoundationTestingWithFaker;  
use IlluminateSupportFacadesMail;
class WelcomeTest extends TestCase
{
use WithFaker;

public function test_queued_email_testing(){

Mail::fake();
Mail::assertNothingSent();
Mail::to($user->email)->send(new WelcomeEmail([
'emailTo' => $user->email,
'subject' =>'CHANGE YOUR PASSWORD',
'message' => [
'email' => $user->email,
'token' => $user->remember_token,
]
]));
Mail::assertQueued(ForgotPassword::class);
}

}

Laravel提供邮件伪造功能进行测试。您可以使用邮件外观的假方法来阻止发送邮件。

实际上是否有 ID 为 3425 的用户?

$user = User::find(3425);

您的代码可能会在此处中断,因为我们无法从空对象中检索 lang。可能应该删除此行,因为它已经在您检查用户是否存在的下方的行中使用。

App::setLocale($user->lang); 

您的电子邮件模板似乎也使用来自$user的数据,因为用户对象已传递给模板。如果您希望用户存在,这也可能会中断。

最新更新