在 Bitbucket 管道中 assertQueued 失败

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。安装了以下内容:

  • 混帐
  • 卷曲
  • libmcrypt-dev
  • 默认-mysql-客户端
  • 压缩
  • 解压
  • 作曲家

Composer installartisan migrate都在 PHPUnit 运行之前运行。除了那个单一的测试之外,所有的测试都通过了。没有其他测试使用 assertQueued 断言。与数据库相关的测试可以正常工作,并且assertSentTo使用 Queueable 特性的通知的测试可以正常通过。

如果您需要任何进一步的信息,请告诉我!我很感激任何帮助。

Vla*_*dan 2

验证您的软件包版本是否是最新的。Bitbucket Pipelines 可能会出现一些奇怪的问题,它知道有时会出现这种情况。