Ale*_*lex 5 php phpunit bitbucket laravel docker
正如标题中所说,assertQueued 在我的 Bitbucket 管道中失败,但在本地没有失败。
有问题的测试可以在下面看到:
Mail::fake();
Queue::fake();
/*Generating users and triggering emails*/
$users = User::all();
foreach($users as $user){
Mail::assertQueued(Email::class, function ($mail) use ($user) {
return $mail->hasTo($user->preferred_email);
});
}
Run Code Online (Sandbox Code Playgroud)
它只是创建用户,向这些用户发送电子邮件,然后检查这些电子邮件是否已排队。
phpunit.xml 文件设置环境变量,如下所示:
<env name="APP_ENV" value="testing"/>
<env name="DB_DATABASE_API" value="homestead"/>
<env name="MAIL_DRIVER" value="log"/>
<env name="CACHE_DRIVER" value="array"/>
<env name="SESSION_DRIVER" value="array"/>
<env name="QUEUE_DRIVER" value="database"/>
Run Code Online (Sandbox Code Playgroud)
所有这些都在本地工作。然而,当通过 Bitbucket 管道运行它时,上面的测试失败了:
The expected [App\Mail\Email] mailable was not queued.
Failed asserting that false is true.
Run Code Online (Sandbox Code Playgroud)
电子邮件如下:
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
class Email extends Mailable
{
use Queueable, SerializesModels;
public $email;
public $subject;
/**
* Create a new message instance.
*
* @param $email
* @param $subject
*/
public function __construct($email, $subject)
{
$this->email = $email;
$this->subject = $subject;
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->subject($this->subject)->view('contact.emails.email');
}
}
Run Code Online (Sandbox Code Playgroud)
排队邮件:
Mail::to($user->preferred_email)->queue(new Email($user->preferred_email, $subject)));
Run Code Online (Sandbox Code Playgroud)
使用的 docker 镜像是PHP:7.2-fpm。安装了以下内容:
Composer install和artisan migrate都在 PHPUnit 运行之前运行。除了那个单一的测试之外,所有的测试都通过了。没有其他测试使用 assertQueued 断言。与数据库相关的测试可以正常工作,并且assertSentTo
使用 Queueable 特性的通知的测试可以正常通过。
如果您需要任何进一步的信息,请告诉我!我很感激任何帮助。
归档时间: |
|
查看次数: |
185 次 |
最近记录: |